1、ELK日志监控简介
ELK由Elasticsearch、Logstash和Kibana三部分组件组成;
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用 。
Kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
2、ELK镜像地址
我搭建的ELK版本为6.3.0,6+版本后,官方就没有将镜像上传到GitHub,只能去官网下载,速度超慢。
这里我将ELK镜像上传到我的网易云供大家拉取。
ES:docker pull hub.c.163.com/xiedongbin/elasticsearch:6.3.0
Logstash:docker pull hub.c.163.com/xiedongbin/logstash:6.3.0
Kibana:docker pull hub.c.163.com/xiedongbin/kibana:6.3.0
拉取后,将镜像分别命名为 elasticsearch、logstash、kibana。
3、ELK目录下,新建logstash目录
进入 logstash,创建logstash.conf文件,文件内容如下:
input {
tcp {
add_field => {"myid"=>"APP"}
mode => "server"
port => 4567
codec => json_lines
}
tcp {
add_field => {"myid"=>"SQL"}
mode => "server"
port => 4568
codec => json_lines
}
}
filter {}
output {
if [myid] == "APP"{
elasticsearch {
hosts => ["192.168.0.13:9200"]
index => "log-%{[service_name]}-%{+YYYY.MM.dd}"
}
file {
path => "ELK/log.log"
codec => line
}
}
if [myid] == "SQL"{
elasticsearch {
hosts => ["192.168.0.13:9200"]
index => "sql-%{[service_name]}-%{+YYYY.MM.dd}"
}
file {
path => "ELK/log.log"
codec => line
}
}
}
创建dockerfile文件,内容如下:
FROM logstash:6.3.0
COPY logstash.conf /some/config-dir/
CMD ["-f","/some/config-dir/logstash.conf"]
以logstash.conf配置新建镜像my-logstash。
docker build -t my-logstash:6.3.0 .
4、修改内存权限设置
vim /etc/sysctl.conf
添加 vm.max_map_count=262144 参数,
保存文件后,使用命令 sysctl -p 使设置立即生效。
5、ELK目录下创建docker-compose.yml文件
version: '2'
services:
elasticsearch:
image: elasticsearch:6.3.0
container_name: elasticsearch
restart: always
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xms1g -Xmx1g"
networks:
- elk
volumes:
- ./data:/usr/elasticsearch/data
logstash:
image: my-logstash:6.3.0
container_name: logstash
restart: always
networks:
- elk
ports:
- "4567:4567"
- "4568:4568"
depends_on:
- elasticsearch
kibana:
image: kibana:6.3.0
container_name: kibana
restart: always
networks:
- elk
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
elk:
以docker-compose运行文件。命令如下:
docker-compose up -d #后台启动,如果容器不存在根据镜像自动创建
docker-compose down -v #停止容器并删除容器
docker-compose start #启动容器,容器不存在就无法启动
docker-compose stop #停止容器
docker-compose、python的安装详见: 搭建Harbor私有镜像仓库
docker network 问题详见: docker 解决network has active endpoints
6、ELK各服务地址说明
ElasticSearch: http://IP:9200/
ElasticSearch日志:http://IP:9200/_search?pretty
Logstash(日志传输地址): IP:4567、IP:4568
Kibana: http://IP:5601
7、Kibana界面汉化
下载汉化工具并解压:
wget https://github.com/anbai-inc/Kibana_Hanization/archive/master.zip
unzip master.zip
将解压后文件夹重命名为master。
查看kibana容器ID, docker inspect -f '{{.Id}}' kibana
通过docker cp命令将本地文件夹复制到容器内部
docker cp master 容器ID:/
进入容器内部,docker exec -it kibana /bin/bash
切换根路径下,进入master目录,执行汉化程序。
python main.py “/opt/kibana/”
最后重启Kibana容器即可察看到汉化后的界面。
8、Zipkin链路追踪
Zipkin启动:
docker run -p 9411:9411 --restart=always --name zipkin --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=IP:9200 --env ES_HTTP_LOGGING=BASIC --env RABBIT_URI=amqp://admin:admin@IP:5672 -d openzipkin/zipkin:2
Zipkin-dependencies启动:
docker run --restart=always --name zipkin-dependencies --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=IP:9200 --env ES_HTTP_LOGGING=BASIC -d openzipkin/zipkin-dependencies:2
Zipkin管理页面地址:http://IP:9411