一、为什么需要日志分析系统
通常我们的系统在运行期间,会输出各种日志,以便于我们定位问题、探查系统运行时状态等等。
当我们需要查看日志时,传统方式是登录到目标服务器上,通过 Linux相关的工具命令,查看日志文件内容。当然对于小型系统(几台服务器以内的)的偶尔查询,姑且可以忍受,如果规模再大点,或频繁需要检索日志,那酸爽无以言表......
另外,传统的日志查找方式弊端也非常明显,比如:
-
如果后端是服务集群,那么经过负载均衡,日志落在哪个节点上就是不确定的,一个一个节点去找,那就太低效了
-
当需要根据某些关键词把相关的日志聚合起来查阅,常规方式就很麻烦
-
微服务流行后,对服务调用的链路追踪和分析更是离不开日志系统
等等
因此我们需要一个日志分析解决方案。
二、简介 ELK 日志分析系统
日志分析系统主要解决以下几个问题:
-
日志的收集
-
日志的存储
-
日志的分析
不同公司或团队对于日志分析解决方案各不相同,有技术实力的大厂一般自研,本文介绍的 ELK是著名的社区解决方案。
ELK 官网(https://www.elastic.co/what-is/elk-stack)
具体理论性知识,可自行查阅,下面开始实操搭建。
三、快速搭建 ELK 日志分析系统
前提条件:先准备好docker 环境(不再赘述)
Step 1: 下载docker镜像
docker pull elasticsearch:7.8.1
docker pull kibana:7.8.1
docker pull logstash:7.8.1
Step 2: 运行ELK(单机版)
# 启动 elasticsearch
docker run \
--name docker-es \
-d \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
elasticsearch:7.8.1
# 启动 kibana
docker run \
--name docker-kibana \
-d \
-p 5601:5601 \
kibana:7.8.1
# 进入docker-kibana容器
docker exec -it docker-kibana /bin/bash
# 进入kibana容器后,主要是去修改下 es的服务地址
cd config // 切换到config目录
vi kibana.yml // 编辑 kibana配置文件
-- 注意:http://192.168.6.6:9200 换成实际es服务的 ip:port --
elasticsearch.hosts: [ "http://192.168.6.6:9200" ]
# 重启 kibana
docker restart docker-kibana# 启动 logstash
docker run --name=docker-logstash -d -p 9601:9601 logstash:7.8.1
# 进入容器
docker exec -it docker-logstash /bin/bash
cd config
# 新增 logstash-tcp2es.conf
touch logstash-tcp2es.conf
# 配置 logstash-tcp2es.conf
input {
tcp {
port => 9601
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://192.168.6.6:9200"]
index => "access_log-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
# 编辑 logstash.yml,内容如下 path.config: /usr/share/logstash/config/logstash-tcp2es.conf
vi logstash.yml
path.config: /usr/share/logstash/config/logstash-tcp2es.conf
# 重启 logstash
docker restart docker-logstash
Step 3: 验证(各服务是否启动正常)
# es 服务
http://localhost:9200/
# kibana 服务
http://localhost:5601/