1.安装elk
1.1:获取最新的镜像:
docker pull sebp/elk
1.2:启动镜像
docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 5601:5601 -p 5044:5044 -p 9200:9200 -p 9300:9300 -it --restart=always --name elk c21727ae794b
启动后等会可以通过浏览器访问ip:5601及ip:9200查看是否已启动。–restart=always表示自启动
如出现以下错误:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
## 执行
sysctl -w vm.max_map_count=262144
编辑/etc/sysctl.conf,在里面加入:vm.max_map_count=262144
1.3:修改配置
## 进入容器
docker exec -it elk /bin/bash
## 编辑配置文件
vim /etc/logstash/conf.d/02-beats-input.conf
编辑的内容如下:
input {
tcp {
port => 5044
codec => json_lines
}
}
output{
elasticsearch {
hosts => ["localhost:9200"]
index => "ruizhi-log-%{+YYYY.MM.dd}"
}
}
退出后,重启elkdocker restart elk
,访问9200和5601可以看见如下界面:
如果希望将页面设置为中文,则在docker中设置kibana.yml中的语言即可。
## 进入elk
docker exec -it elk /bin/bash
## 找到kibana.yml(可以用whereis kibana.yml查询)
cd /opt/kibana/config
在yml中加上以下配置:
i18n.locale: "zh-CN"
重启即可。
如果进入后,都能正常访问说明正常,此时进入kiban中的manage,创建索引。输入ruizhi-log-*去匹配,然后点击下一步,选择@timestamp。
如果出现You'll need to index some data into Elasticsearch before you can create an index pattern
或者输入后下一步为灰,这是因为里面没有数据导致的,在命令行输入一个假的数据即可。
curl -H "Content-Type: application/json" -XPOST 'http://192.168.80.129:9200/ruizhi-log-2020-04-25/test-log' -d '{"code":200,"message":"测试"}'
2.springcloud中配置
2.1 jar包配置
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.1</version>
</dependency>
2.2 logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>ProviderLog</contextName>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<!--本工程中没使用文件输出日志,只用了console和logstash,此处配置无用-->
<property name="LOG_HOME" value="D:/" />
<!--可以手动指定log名字-->
<property name="appName" value="wdnmdService" />
<!--也可以使用工程的名字-->
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<springProperty scope="context" name="serverPort" source="server.port"/>
<!-- logstash远程日志配置-->
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.80.129:5044</destination>
<!-- 默认是JSON格式,所以logstash中应该配置codec为json_lines-->
<!-- LoggingEventCompositeJsonEncoder是LogstashEncoder的父类,可以使用pattern自定义json的关键字
-->
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder" >
<!-- <encoder class="net.logstash.logback.encoder.LogstashEncoder" >-->
<providers>
<!--可以配合LogstashEncoder使用-->
<!-- <timestamp/>-->
<!-- <version/>-->
<!-- <message/>-->
<!-- <loggerName/>-->
<!-- <threadName/>-->
<!-- <logLevel/>-->
<!-- <callerData/>-->
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
<!--或者使用"app": "${appName}",-->
<!-- 都是sleuth的,本处没用到-->
<!-- "trace": "%X{X-B3-TraceId:-}",-->
<!-- "span": "%X{X-B3-SpanId:-}",-->
<!-- "parent": "%X{X-B3-ParentSpanId:-}",-->
<!-- "stack_trace": "%exception{10},"-->
{
"app": "${springAppName}_${serverPort}",
"level": "%level",
"thread": "%thread",
"class": "%logger{40}",
"message": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/system.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="stash" />
<appender-ref ref="STDOUT" />
<!-- <appender-ref ref="FILE" />-->
</root>
</configuration>
2.3 输出日志
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author:
* @Date: 2020-03-18 15:05
* @Description:
*/
@RestController
@RequestMapping("/contractInfo")
@Api(tags = "客户端合同信息-用户信息api")
public class ContractInfoController {
Logger logger = LoggerFactory.getLogger("ContractInfoController");
/**
* 合同信息-分页
*
* @param dto 分页需要的参数
* @return
*/
@ApiOperation(value = "合同信息分页", httpMethod = "POST")
@RequestMapping(value = "/pageContractInfo", method = RequestMethod.POST)
public void pageContractInfo(@RequestBody ContractInfoPageDto dto) {
logger.info("分页合同数据");
logger.info("分页合同请求,数据:" + dto);
}
}
配置好启动后就可以http://192.168.80.129:5601/中看见相关日志。(第一次时,需要在Management中的Kibana下的Index patterns添加配置。Index pattern为*,方式选@timestamp)