Elk日志系统使用
一、我们遇到的问题?
- 程序运行避免不了出错,测试环境时我们可以通过打断点定位问题。但是上线之后的项目出bug,进行定位时就需要查看日志。但是如果日志量太大,传统的方式效率太过低下了。
- 咱们的项目是一个分布式的架构,如果上线不同的服务模块部署在不同的服务器,出现问题时,不好定位问题,日志缺少一个统一的管理。
二、Elk是什么?
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。
ELK是由三个工具整合的日志系统(elasticsearch、logstash、kibana)
- Elasticsearch:是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能,能够快速根据不同的条件找到我们想看到的日志。
- Logstash:起到的作用是日志收集,各个微服务将日志关联到logstash。
- kibana:起到的作用是可视化UI界面。查看日志总归是有个图形化界面比较好看实用。
三、ELK怎么在项目中使用
1.添加依赖
<!--ELK的logstash--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.2</version> </dependency>
2.修改配置(在logback.xml中添加以下配置)
<!-- 为logstash输出的JSON格式的Appender --> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5044</destination> <!-- 日志输出编码 --> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "severity": "%level", "service": "${springAppName:-}", "trace": "%X{X-B3-TraceId:-}", "span": "%X{X-B3-SpanId:-}", "exportable": "%X{X-Span-Export:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <!-- 日志输出级别 --> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="logstash" /> <appender-ref ref="file" /> </root>
四、服务器端应该做什么操作呢?
4.1修改logstash目录下,conf文件夹中的logstash.conf
添加以下内容
input {#输入 # Logstash收集TCP/UDP日志 tcp { port => 5044 #编码 codec => json_lines } } output {#输出 elasticsearch { hosts => ["localhost:9200"] index => "springboot-elk" } stdout {#标准输出 # 将采用Ruby Awsome Print库来解析日志( 通过rubydebug输出键值对) codec => rubydebug } }
4.2修改kibana目录下,conf文件夹中的kibana.yml,添加以下配置
elasticsearch.hosts: ["http://localhost:9200"]
五、查看效果
输入kibana控制台访问地址进行效果查看:
http://localhost:5601/app/kibana