10分钟实现日志查询管理及其数据可视化

   日志查询 是程序员 在日常工作中很重要且使用率较高的一部分 仅次于代码编写 本次学习 继续从0到1 完整搭建 日志查询管理平台 实现安全高效的 日志查询等功能


ELK资源准备
1
2
3
4
5
6
7
8
# 拉取 Elasticsearch 镜像
docker pull elasticsearch:8.6.0

# 拉取 Logstash 镜像
docker pull logstash:8.6.0

# 拉取 Kibana 镜像
docker pull kibana:8.6.0
服务部署
1
2
3
4
5
6
7
8
# 部署 Elasticsearch
docker run -d --name elasticsearch -e "discovery.type=single-node" -e "ELASTIC_PASSWORD=qweasdzxc" -e "xpack.security.enabled=false" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 --network=cicd_network elasticsearch:8.6.0

# 部署 Kibana
docker run -d --name kibana -e "ELASTICSEARCH_HOSTS=http://192.168.1.1:9200" -e "ELASTICSEARCH_PASSWORD=qweasdzxc" -e "I18N_LOCALE=zh-CN" -p 5601:5601 --network=cicd_network kibana:8.6.0

# 部署 Logstash
docker run -d --name logstash -v /usr/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /logs/app.log:/logs/app.log -p 5044:5044 --network=cicd_network logstash:8.6.0

至此_已完成ELK系统部署


使用流程:
1
2
# 访问Kibana http://localhost:5601
Analytics-》Discover-》创建数据视图-》开始搜索日志
使用效果:

首页:视图1.png
搜索功能:视图0.png


附加:_Logstash配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# logstash.conf
input {
file {
path => "/logs/app.log"
start_position => "beginning"
stat_interval => "3"
type => "app_log"
}
}
output {
if [type] == "app_log" {
elasticsearch {
hosts => ["http://192.168.1.1:9200"]
index => "app_log-%{+YYYY.MM.dd}"
}
}
}
附加:_Java项目日志配置logback.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--日志文件所在目录-->
<property name="LOG_HOME" value="/logs" />

<!--采用打印到控制台,记录日志的方式-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--日志输出格式-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<!-- 采用保存到日志文件 记录日志的方式,
%d{yyyy-MM-dd HH:mm:ss.SSS}:输出日志发生的时间,精确到毫秒。
[%thread]:输出日志所在的线程名。
%-5level:输出日志级别,使用占位符%5level可以保持日志级别的对齐。
%logger{36}:输出日志所在的类名(只输出类名的后36个字符)。
%msg:输出日志消息。
%n:新行。
-->
<!--滚动记录文件-->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志文件地址-->
<file>${LOG_HOME}/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--粒度:天。等价于一天一个文件-->
<fileNamePattern>${LOG_HOME}/appLog-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<root level="INFO" additivity="false">
<appender-ref ref="rollingFile" />
<appender-ref ref="console" />
</root>
</configuration>
过往思考

1.首次接触ELK系统也是在虎扑体育网,有看到NOC部门同事在做一些简单的查询,而公司大部分业务用的都是云服务商提供的,少部分则需要使用跳板机在生产服务器上去命令行查看。
2.目前看到过最好的日志系统是在哈啰出行,自研的,毕竟阿里系,估计在阿里云日志基础上做的封装,每次服务发布后,同时可以看到关键日志滚动式呈现,很方便,而且搜索效率也很高。
3.印象见过最差的是京东云服务提供的,爱回收这公司“降本增效”,90%产品从【阿里云->京东云】,便宜是便宜了些,服务器-数据库-日志 全方位总是差点意思,一分钱一分货,也能理解。但是日常工作时,拿它后台去找个日志,超过7天查不了,查7天内的数据,有时浏览器能卡3-5分钟,直至浏览器卡死,很是痛苦。有一次遇到京东驻场到这边的员工,我在他的眼神中看到迷茫,知道他们被骂的很惨,但也优化不动。
4.对于高使用率项目,或开发者的不良习惯等原因,有的单服务每天日志可达到70G,运维老哥找过来,也吐槽这日志也太多了….这也是技术难点和挑战..