- ELK 到底是什么呢?
- ELK能做什么?
- 你会学到什么?
- 完整日志系统基本特征
- ELK架构
- ELK部署
- LogBack+ELK整合
- 启动项目查看elasticsearch数据
- Kibana观察日志
- kibana可视化
- 项目示例源码
- https://github.com/1769974308/docker-middleware-environment/tree/master/ELK">docker elk 搭建:https://github.com/1769974308/docker-middleware-environment/tree/master/ELK
- https://github.com/1769974308/small-skill-learning/tree/master/elk">logback日志工程:https://github.com/1769974308/small-skill-learning/tree/master/elk
ELK 到底是什么呢?
“ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化,后面加入了一系列轻量型的单一功能数据采集器,并把它们叫做 Beats。
ELK能做什么?
一套解决方案,应该清楚它能为我们做什么,能解决什么问题,是对方案选型的重中之重。以下介绍几个应用场景。
1、应用出现故障,需要通过日志排查故障信息。当应用已部署了多个环境时,这时排查的难度和耗时就是一个巨大的损耗。而ELK就可以对多个环境的日志进行收集,过滤,存储,检错,可视化。只需要查的kibana上的日志信息,就可以找出故障所在。
2、针对应用在生产环境上的表现需要数据支撑,如访客数,功能调用量,出错率等等。此类数据的收集,像ELK这样对应用无入侵,且功能强大的的开源软件。
简单来说,日志是记录一个服务的所有行为的数据。而ELK则对服务行为数据进行分析。应该要考虑几个问题,那就是日志的输出是否合理?是否符合规范?怎样才能输出我们想要的日志?在研发过程中,那些什么内容应该被输出到日志?这些问题,需要考虑清楚,这将影响ELK的配置和部署。
你会学到什么?

完整日志系统基本特征

ELK架构
ELK部署
docker部署:https://github.com/1769974308/docker-middleware-environment/tree/master/ELK
版本:7.14.2
docker方式启动ELK
[root@VM-24-15-centos ELK]# lltotal 12drwxr-xr-x 3 root root 4096 Jan 13 11:22 config-rw-r--r-- 1 root root 1353 Jan 13 16:46 docker-compose.yml-rw-r--r-- 1 root root 161 Jan 13 11:22 README.md[root@VM-24-15-centos ELK]# docker-compose -f docker-compose.yml up -dCreating network "elk_middleware-network" with driver "bridge"Creating elasticsearch ... doneCreating kibana ... doneCreating logstash ... done[root@VM-24-15-centos ELK]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTSNAMES8da47fae04b9 logstash:7.14.2 "/usr/local/bin/dock…" 14 seconds ago Up 13 seconds 0.0.0.0:5000->5000/tcp, 0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp, 0.0.0.0:5000->5000/udp logstash4d8ce85ec8e3 kibana:7.14.2 "/bin/tini -- /usr/l…" 14 seconds ago Up 13 seconds 0.0.0.0:5601->5601/tcpkibana42dcc5d255d5 elasticsearch:7.14.2 "/bin/tini -- /usr/l…" 15 seconds ago Up 14 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcpelasticsearch3c44827fb1fb nacos/nacos-server:2.0.3 "bin/docker-startup.…" 2 weeks ago Up 2 weeks 0.0.0.0:8848->8848/tcp, 0.0.0.0:9555->9555/tcp, 0.0.0.0:9848->9848/tcpnacos-standalone-mysql[root@VM-24-15-centos ELK]#
访问kibana
kibana是一个web应用,可以通过5601端口访问。只需要在浏览器中指定kibana运行的机器,然后指定端口号即可。例如 http://ip:5601
检查kibana状态
访问elasticsearch
安装ElasticSearch Head插件
Chrome应用商店:https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm?hl=zh-CN
LogBack+ELK整合
logback-logstash的整合依赖包
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.1</version></dependency>
logback-spring.xml配置
<?xml version="1.0" encoding="UTF-8"?><configuration><!-- https://github.com/spring-projects/spring-boot/blob/v1.4.2.RELEASE/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml --><include resource="org/springframework/boot/logging/logback/defaults.xml"/><property name="APP_NAME" value="FlashSaleApplication"/><property name="LOG_PATH" value="${user.home}/${APP_NAME}/logs"/><property name="LOG_FILE" value="${LOG_PATH}/application.log"/><appender name="APPLICATION" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>7</maxHistory><maxFileSize>50MB</maxFileSize><totalSizeCap>20GB</totalSizeCap></rollingPolicy></appender><conversionRule conversionWord="ip" converterClass="com.taotao.utils.IPConverterConfig" /><appender name="LOG_STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--logstash日志收集ip和端口--><destination>82.157.137.229:5044</destination><queueSize>1048576</queueSize><!--日志输出编码--><encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><timestamp><timeZone>UTC</timeZone></timestamp><pattern><pattern>{"app_date": "%d{yyyy-MM-dd HH:mm:ss:SSS}","app_ip": "%ip","app_thread": "%thread","app_traceId": "%X{traceId}","app_level": "%level","app_logger": "%logger{40}","app_message": "%msg%n"}</pattern></pattern></providers></encoder></appender><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><charset>utf8</charset><pattern>%d{yyyy-MM-dd HH:mm:ss:SSS}|%ip|%thread|%X{traceId}|%level|%logger{36}|%msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="LOG_STASH"/><appender-ref ref="CONSOLE"/><appender-ref ref="APPLICATION"/></root></configuration>
Logstash配置
[root@VM-24-15-centos pipeline]# cat logstash.confinput {tcp {host => "0.0.0.0"port => 5044codec => json_lines}}filter {mutate {split => ["app_message","|"]}if [app_message][0] {mutate {add_field => {"app_keyword" => "%{[app_message][0]}"}}}if [app_message][1] {mutate {add_field => {"app_keynote" => "%{[app_message][1]}"}}}if [app_message][2] {mutate {add_field => {"app_params" => "%{[app_message][2]}"}}}}output {elasticsearch {hosts => "http://elasticsearch:9200"index => "flash-sale-%{+YYYY.MM.dd}"ecs_compatibility => disabled}}[root@VM-24-15-centos pipeline]#
启动项目查看elasticsearch数据
Kibana观察日志
创建索引模式
浏览器中指定端口号5601来访问 Kibana UI 页面
指定一个索引模式来匹配一个或多个 Elasticsearch 索引名称,星号 () 匹配0或多个索引名称中的字符。
可以选择索引中包含时间戳的字段。Kibana 会读取索引映射,列出包含时间戳的所有字段
点击 Create 增加索引模式,默认情况下,第一个模式被自动配置为默认的。当索引模式不止一个时,可以通过点击 *Management > Index Patterns 索引模式题目上的星星图标来指定默认的索引模式。
全部设置完毕!Kibana 连接了 Elasticsearch 的数据。展示了一个匹配到的索引的字段只读列表
kibana可视化
在Discover页探索和浏览数据
在Visualize页做数据图表映射



