docker搭建elk日志收集系统
系统日志是开发和调试的重要参考依据,线上的日志查询起来比较繁琐,很耗时间,使用elk方便搞定日志!!!
1. docker 配置
使用docker快速搭建elk日志收集系统,免去繁琐安装,下面直接看配置:
docker-compose
version: '3'
services:
elasticsearch:
image: es-ik:6.6.2
container_name: elasticsearch
restart: always
environment:
- "cluster.name=elasticsearch"
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- 9200:9200
- 9300:9300
kibana:
image: docker.elastic.co/kibana/kibana:6.6.2
container_name: kibana
environment:
- SERVER_NAME=kibana
- ELASTICSEARCH_URL=http://elasticsearch:9200
- XPACK_MONITORING_ENABLED=true
ports:
- 5601:5601
depends_on:
- elasticsearch
logstash:
image: logstash:6.6.2
container_name: logstash
volumes:
- ~/docker/mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
links:
- elasticsearch:es
ports:
- 4560:4560
说明!!! es-ik:6.6.2是自己创建的镜像,步骤: 创建带ik插件镜像
3个容器分别是:
elasticsearch建立索引kibana数据可视化logstash数据收集
这三个组件首字母,简称就是ELK,没什么可说的. docker-compose配置不复杂,不是本篇博客的重点,略过...
logstash.conf
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
type => "business"
}
}
output {
elasticsearch {
hosts => ["es:9200"]
action => "index"
codec => json
index => "%{type}-%{+YYYY.MM.dd}"
template_name => "business"
}
}
上面docker-compose配置中,logstash有一个挂载文件,用来配置logstash. 定义输入输出规则,采用json数据输出.
启动docker容器之前,先创建~/docker/mydata/logstash/logstash.conf文件,否则则启动会有问题.
启动容器
启动命令:
docker-compose up -d
查看docker进程,格式化输出:
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
Logstash安装json_lines插件
- 进入logstash容器
docker exec -it logstash /bin/bash - 安装插件
docker exec -it logstash /bin/bash
安装完成后,访问: ip:5601 即可看到kibana界面
2. logback配置
使用springboot集成方式实现日志收集,没有使用日志监听
logstash依赖
net.logstash.logback
logstash-logback-encoder
5.3
logback-spring.xml
通过logback-spring.xml指定日志输出,在配置文件中添加日志输出到logstash,完整配置:
<?xml version="1.0" encoding="UTF-8" ?>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%level] [%c:%L] - %msg%n
logs/log.log
logs/log.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{traceId}] [%level] [%thread] [%c:%L] - %msg%n
${LOG_STASH_HOST}:4560
Asia/Shanghai
{
"service": "${APP_NAME:-}",
"level": "%level",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger",
"traceId": "%X{traceId:-}",
"message": "%message",
"stack_trace": "%exception"
}
配置要点说明:
指定日志记录的服务名称,与springboot配置中的spring.application.name对应,默认springBoot
指定logstash服务地址,与springboot配置中的logstash.host对应,默认localhost
${LOG_STASH_HOST}:4560
Asia/Shanghai
{
"service": "${APP_NAME:-}",
"level": "%level",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger",
"traceId": "%X{traceId:-}",
"message": "%message",
"stack_trace": "%exception"
}
定义日志输出规则, 语法简单介绍:
${}: 获取spring配置参数,如${APP_NAME:-}${name:-}: 获取值,默认空%name: log默认输出关键字,如:%level日志级别%X{}: 系统变量, 比如通过MDC设置的变量,%X{traceId:-}用于日志追踪使用
指定日志输出到logstash,ref与上边的name对应
启动项目,开始正式的日志分析!!!(好激动~~~)
3. kibana使用
项目启动成功后,我们会看到生成的索引:
kibana查看
elasticsearch-head查看
开始创建索引规则
选择时间过滤
查看数据
选择查看数据的时间段
数据已经显示出来了,但是看着挺乱的,选择message过滤
数据清爽了许多
查看详细数据,可以点小三角 △
异常信息,多行显示
下一篇:
主要参考:
- https://www.toutiao.com/i6841047312022635021/
- https://juejin.im/post/5eef217d51882565d74fb4eb(原创)
答疑解惑:
- logstash 多行合并
- https://blog.csdn.net/weixin_34228662/article/details/91766056
- http://doc.yonyoucloud.com/doc/logstash-best-practice-cn/codec/multiline.html
- grok 语法
- https://www.jianshu.com/p/443f1ea7b640
- http://doc.yonyoucloud.com/doc/logstash-best-practice-cn/filter/grok.html
- logback pattern语法
- http://www.kailing.pub/article/index/arcid/214.html
- https://blog.csdn.net/ffyyhh995511/article/details/103737514