作为系统运维工程师,在日常运维工作中,日志的收集与管理非常重要,要问日志收集用哪个工具当然选择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'

浏览器测试访问:

使用docker简单部署ELK_docker

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测试

http://172.16.0.3:5601

使用docker简单部署ELK_elasticsearch_02

五、部署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,设置索引模式

使用docker简单部署ELK_elasticsearch_03

使用docker简单部署ELK_elasticsearch_04

2.查看数据

kibana上的discover上选择elk索引

使用docker简单部署ELK_IP_05


       至此,使用docker简单部署ELK完成!之所以说简单,是因为部署过程中没有涉及到密码,还就是日志怎样收集到ELK部分没有介绍。

想了解如何将日志收集到ELK,敬请关注下一章节内容。谢谢。