1.项目背景

最近公司后端架构变成了微服务,由于微服务项目模块较多,把日志集中处理以便于快速准确的定位问题

2.技术选型

Elasticsearch + Fluentd + Kibana

3.项目日志对接 Fluentd 说明

(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 配置

logback-spring.xml 放到 resources 下

<?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>

3.使用 Kibana 查询日志(Discover)

### (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)

4.日志索引规则

每日产生日志较少,目前索引创建规则为按月创建(根据公司环境可定制)

5.日志查询维度

(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:日志发生的时间

6.图表(Visualize)

kibana 支持丰富的图表用来做各种统计,例如可以以时间和特定日志的数量统计某一时间段的日志里,来体现项目的某一时间段的访问量或活跃度

7.仪表板(Dashboard)

多个带有规则的图表组成仪表板,可更直观的查看各种数据统计

8.对 ES 数据的操作(DevTools)

9.Fluend 采集配置

骚等两天补齐

10.日志定期清除

现在日志清除策略为定期清除 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


↙↙↙阅读原文可查看相关链接,并与作者交流