日志查询 是程序员 在日常工作中很重要且使用率较高的一部分 仅次于代码编写 本次学习 继续从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
|
使用流程:
1 2
| # 访问Kibana http://localhost:5601 Analytics-》Discover-》创建数据视图-》开始搜索日志
|
使用效果:
首页:
搜索功能:
附加:_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,运维老哥找过来,也吐槽这日志也太多了….这也是技术难点和挑战..