作为系统运维工程师,在日常运维工作中,日志的收集与管理非常重要,要问日志收集用哪个工具强,当然选择ELK。E代表Elasticsearch:用于存储、搜索和分析大量数据。L代表Logstash :从各种源(如文件、数据库、消息队列等)收集、处理和转换数据。K代表Kibana:数据可视化平台。
下面使用docker简单部署ELK的事例(仅做参考学习):
一、创建程序工作路径
mkdir /opt/elk/elasticsearch
mkdir /opt/elk/kibana
mkdir /opt/elk/logstash
注意:养成良好习惯,不同的程序文件放到不同的文件夹里,方便日后查找和管理。
二、创建docker网络
docker network create elk
注意:不同的程序使用不同的docker网络,有助于网络区分和管理。当然也可以使用host网络。
三、部署elasticsearch
1.先pull下载elasticsearch
docker pull elasticsearch:7.12.1
2.创建临时的容器(方便拷贝容器里的文件到宿主机,然后在宿主机编辑/修改文件,这就是本文“简单部署”字面意思之一)
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
注意:由于是临时的容器,所以端口就随机生成了,不用指定 。
3.拷贝文件到宿主机
docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml /opt/elk/elasticsearch/
chmod 777 elasticsearch/elasticsearch.yml
mkdir data
chmod -R 777 /opt/elk/elasticsearch/data/
注意:1、data目录的位置。2、授权文件可读可写可执行(这点很重要,否则容器创建时会报错)。
3.1.删除临时容器
docker rm -f es
3.2.创建正式ES容器
#创建正式es容器
docker run -d --name es --net elk -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --privileged=true -v /opt/elk/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/elk/elasticsearch/data/:/usr/share/elasticsearch/data elasticsearch:7.12.1
3.3.测试访问ES
#测试访问es的9200端口
curl -XGET 'http://172.16.0.3:9200'
curl -XGET 'http://172.16.0.3:9200/_cluster/health?pretty'
浏览器测试访问:
3.4.创建索引
curl -XPUT http://172.16.0.3:9200/elk
四、部署kibana
1.先pull下载kibana
docker pull kibana:7.12.1
2.创建临时的容器(方便拷贝容器里的文件到宿主机,然后在宿主机编辑/修改文件)
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://172.16.0.3:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
注意:es的IP不要写错了。
3.拷贝文件到宿主机
docker cp kibana:/usr/share/kibana/config/kibana.yml /opt/elk/kibana/
chmod -R 777 /opt/elk/kibana/kibana.yml
注意:文件的授权很重要,一定要授权。
3.1.修改kibana配置文件
cat kibana.yml
server.name: kibana
server.host: "0"
#es的访问ip
elasticsearch.hosts: [ "http://172.16.0.3:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
#汉化
i18n.locale: zh-CN
3.2.删除临时容器
docker rm -f kibana
3.3.创建正式kibana容器
docker run -d --name kibana --net elk -p 5601:5601 -v /opt/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.12.1
3.4.访问kibana测试
五、部署logstash
1.先pull下载logstash
docker pull logstash:7.12.1
2.创建临时容器
docker run -d -P --name logstash --net elk logstash:7.12.1
3.复制文件到宿主机
docker cp logstash:/usr/share/logstash/config /opt/elk/logstash/
docker cp logstash:/usr/share/logstash/data /opt/elk/logstash/
docker cp logstash:/usr/share/logstash/pipeline /opt/elk/logstash/
chmod -R 777 /usr/share/logstash/config
chmod -R 777 /usr/share/logstash/data
chmod -R 777 /usr/share/logstash/pipeline
注意:一定要授权,很重要!
3.1修改配置文件
vim /opt/elk/logstash/config/logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://172.16.0.3:9200" ]
注意:修改es的IP地址。
vim /opt/elk/logstash/pipeline/logstash.conf
input {
# 从文件读取日志信息
file {
path => "/opt/test.json"
start_position => "beginning" # 设置从文件的开始位置开始读取日志
sincedb_path => "/usr/share/logstash/pipelog.txt" # 指定记录文件读取位置的 sincedb 文件路径
codec => "json"
}
tcp {
mode => "server"
host => "0.0.0.0" # 允许任意主机发送日志
port => 5044
}
}
output {
# stdout { codec => rubydebug }
# 输出到 Elasticsearch
elasticsearch {
action => "index"
hosts => ["http://172.16.0.3:9200"]
index => "elk" # 索引名称
}
}
注意:修改es的IP地址。
3.2删除临时容器
docker rm -f logstash
3.3. 创建正式logstash容器
docker run -d --name logstash --net elk --privileged=true -p 5044:5044 -p 9600:9600 -v /opt/elk/logstash/data/:/usr/share/logstash/data -v /opt/elk/logstash/config/:/usr/share/logstash/config -v /opt/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:7.12.1
六、测试
1.访问kibana,设置索引模式
2.查看数据
kibana上的discover上选择elk索引
至此,使用docker简单部署ELK完成!之所以说简单,是因为部署过程中没有涉及到密码,还就是日志怎样收集到ELK部分没有介绍。
想了解如何将日志收集到ELK,敬请关注下一章节内容。谢谢。