ELK:(ELK 由 ElasticSearch 、 Logstash 和 Kiabana 三个开源工具组成),Elasticsearch用于存储日志信息,Logstash用于收集日志,Kibana用于图形化展示。
本文我们使用docker-compose搭建ELK日志分析系统。
需要先在linux上安装好docker和docker-compose。不会的童鞋可以参考我的文章:
linux(centos7)安装docker
linux(centos7)安装docker-compose
准备工作
- linux Elasticsearch 默认使用 mmapfs目录来存储其索引。操作系统对mmap计数的限制可能太低,这可能会导致内存不足异常。在Linux上,可以通过运行以下命令来增加限制.
sysctl -w vm.max_map_count=262144
- 创建数据挂载路径
mkdir -p /usr/local/kiki/elk # 创建ELK Docker Compose文件存储路径
mkdir -p /usr/local/kiki/elasticsearch/data # 创建Elasticsearch数据挂载路径
mkdir -p /usr/local/kiki/elasticsearch/plugins # 创建Elasticsearch插件挂载路径
mkdir -p /usr/local/kiki/logstash # 创建Logstash配置文件存储路径
- 在/usr/local/kiki/logstash 路径下创建logstash-kiki.conf配置文件:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "es:9200"
index => "kiki-logstash-%{+YYYY.MM.dd}"
}
}
logstash-kiki.conf定义了logstash的input和output。
- 在/usr/local/kiki/elk下创建docker-compose.yml文件,内容如下:
version: '3'
services:
elasticsearch:
image: elasticsearch:6.4.1
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #集群名称为elasticsearch
- "discovery.type=single-node" #单节点启动
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #jvm内存分配为512MB
volumes:
- /usr/local/kiki/elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /usr/local/kiki/elasticsearch/data:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- my-bridge
kibana:
image: kibana:6.4.1
container_name: kibana
links:
- elasticsearch:es #配置elasticsearch域名为es
depends_on:
- elasticsearch
environment:
- "elasticsearch.hosts=http://es:9200" #因为上面配置了域名,所以这里可以简写为http://es:9200
ports:
- 5601:5601
networks:
- my-bridge
logstash:
image: logstash:6.4.1
container_name: logstash
volumes:
- /usr/local/kiki/logstash/logstash-kiki.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
links:
- elasticsearch:es
ports:
- 4560:4560
networks:
- my-bridge
networks:
my-bridge:
driver: bridge
- 实际操作如图:
以上准备 工作就完成了,是不是很简单。下面我们来试验一下。
启动ELK
- 切换到/usr/local/kiki/elk 目录下,使用docker-compose up 命令启动。第一次执行会自动下载3个镜像。
- 使用docker-compose ps查看启动状态
发现elasticsearch没有启动,这是因为elasticsearch的data目录权限不够,执行下面命令
chmod 774 /usr/local/kiki/elasticsearch/data/
- 再次执行docker-compose up -d,再次查看 docker-compose ps
3个容器均已启动。
- logstash-kiki.conf配置文件中用到了json_lines来处理json类型的日志数据。所以我们需要为logstash安装json_lines插件。
进入到logstash 容器中:
docker exec -it logstash /bin/bash
进入容器的 /bin/ 目录,执行
logstash-plugin install logstash-codec-json_lines
安装过程很慢,中间报错是因为断网了,再次执行下命令静静等待就行,安装完成后输入exit退出,或者按Ctrl+Q+P 退出。
效果展示
- 访问http://192.168.85.128:5601/ ,192.168.85.128是我虚拟机IP,结果如下:
这样,我们就搭建好了ELK日志分析系统,下一篇文章我们介绍,SpringBoot项目如何接入ELK日志分析系统。
座右铭:学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。