最近公司后端架构变成了微服务,由于微服务项目模块较多,把日志集中处理以便于快速准确的定位问题
Elasticsearch + Fluentd + Kibana
(1)引入依赖
<dependency>
<groupId>org.fluentd</groupId>
<artifactId>fluent-logger</artifactId>
<version>0.3.4</version>
</dependency>
<dependency>
<groupId>com.sndyuk</groupId>
<artifactId>logback-more-appenders</artifactId>
<version>1.7.1</version>
</dependency>
(2)logback-spring.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="service"/>
<springProperty scope="context" name="spring.profiles" source="spring.profiles" defaultValue="dev"/>
<springProperty scope="context" name="eureka.instance.instance-id" source="eureka.instance.instance-id" defaultValue="eureka-server"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<tag>service.${spring.profiles}</tag>
<label>logback</label>
<remoteHost>172.19.27.81</remoteHost>
<port>24224</port>
<additionalField>
<key>service_name</key>
<value>${spring.application.name}</value>
</additionalField>
<additionalField>
<key>profile</key>
<value>${spring.profiles}</value>
</additionalField>
<additionalField>
<key>ip_address</key>
<value>${eureka.instance.instance-id}</value>
</additionalField>
</appender>
<root level="INFO">
<appender-ref ref="FLUENT" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
### (1)创建要监听的项目索引(Management -> Index Patterns)
![](/uploads/photo/2020/f96d9a0c-a54b-40e5-bd10-902747c15e8c.png!large)
### (2)定制查询过滤器
![](/uploads/photo/2020/bc697956-2549-41e9-ba45-6ca6ccd4435a.png!large)
每日产生日志较少,目前索引创建规则为按月创建(根据公司环境可定制)
(1)业务日志
ip_address:区分集群内不同的服务
level:区分不同日志级别
logger:日志产生的位置
message,msg:服务产生的消息
profile:用于区分环境
service_name:用于区分服务名称
thread:产生的线程
@timestamp:日志发生的时间
(2) Nginx 日志
agent:浏览器信息
code:code码
method:请求类型
path:请求url
referer:来源
remote:客户端IP
size:大小
@timestamp:日志发生的时间
kibana 支持丰富的图表用来做各种统计,例如可以以时间和特定日志的数量统计某一时间段的日志里,来体现项目的某一时间段的访问量或活跃度
多个带有规则的图表组成仪表板,可更直观的查看各种数据统计
骚等两天补齐
现在日志清除策略为定期清除 3 个月以前的日志
time1=$(date "+%Y-%m-%d %H:%M:%S")
m_date=`date -d "100 day ago" +"%Y.%m"`
echo ${m_date}
result=`curl -XDELETE http://172.19.27.81:9200/*-${m_date}`
FILE=delete.log
echo ${time1} ${m_date} ${result} >> $FILE