目录
[4. 创建logstash容器](#4. 创建logstash容器)
前言
ELK 是一组开源软件套件,用于实现日志管理和分析。它由三个主要组件组成:
-
Elasticsearch :一个基于 Lucene 的分布式搜索引擎,用于存储、搜索和分析大量数据。
-
Logstash :一个数据收集引擎,用于从各种源(如文件、数据库、消息队列等)收集、处理和转换数据,然后将其发送到 Elasticsearch 中进行存储和分析。
-
Kibana :一个数据可视化平台,用于实时监控和分析 Elasticsearch 中的数据,并将其以交互式图表、图形和地图等形式展示出来。
ELK 被广泛应用于日志管理领域,可以帮助用户高效地收集、存储、索引、搜索和分析大量的日志数据。它不仅适用于 Web 应用程序的日志管理,还可以用于系统日志、网络设备日志、安全事件日志等各种类型的数据收集和分析。
除了 ELK,还有一些类似的开源日志管理工具,例如 Graylog 和 Fluentd 等,它们也提供了类似的功能,但在实现方式和使用场景上略有不同。
部署容器所需要的版本,可以上dockerhub上确认,这里统一使用7.12.1版本,dockerhub链接如下:
一、创建程序工作路径
mkdir -p /opt/elk/{elasticsearch,kibana,logstash}
二、创建私有网络
创不创建都行,我的宿主机环境没有和默认bridge网络172.17冲突的网段,实验里创建了一个私有网络,来模拟企业环境
docker network create elk docker network ls
三、部署elasticsearch
1.先搜速后下载
docker search elasticserch docker pull elasticsearch:7.12.1
2.创建一个基础的容器(此步骤是为了拷贝容器里的文件)
docker run -d --name es --net elk -P -e "discovery.type=single-node" elasticsearch:7.12.1
--name 设置容器名字
--net 设置容器的网络
-P 自动分配端口
-e 设置环境变量
3.拷贝文件到宿主机
3.1进入容器
docker exec -it es /bin/bash
3.2拷贝并授权
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/
3.3删除基础容器
docker rm -f es
4.创建容器
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
5.访问9200测试
curl -XGET 'http://localhost:9200' curl -XGET 'http://localhost:9200/_cluster/health?pretty'
访问浏览器
6.创建索引
curl -XPUT http://192.168.159.128/elk
7.查询索引
这里面查不到数据,因为是刚创建的
curl -XGET http://192.168.159.128:9200/elk/_search
四、部署kibana
1.同理,先搜索后下载
docker search kibana docker pull kibana:7.12.1
2.创建一个基础的容器
docker run -d --name kibana --net elk -P -e "ELASTICSEARCH_HOSTS=http://192.168.159.128:9200" -e "I18N_LOCALE=zh-CN" kibana:7.12.1
-e 环境变量指定es的 访问ip
3.拷贝文件到宿主机
3.1进入容器
docker exec -it kibana /bin/bash
3.2拷贝并授权
docker cp kibana:/usr/share/kibana/config/kibana.yml /opt/elk/kibana/ chmod -R 777 /opt/elk/kibana/kibana.yml
3.3修改kibana配置文件
cat kibana.yml server.name: kibana server.host: "0" #es的访问ip elasticsearch.hosts: [ "http://192.168.159.128:9200" ] monitoring.ui.container.elasticsearch.enabled: true #汉化 i18n.locale: zh-CN
3.4删除基础容器
docker rm -f kibana
4.创建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
5.访问kibana测试
五、部署logstash
1.同理,先搜索后下载
docker search logstash docker pull logstash:7.12.1
2.创建一个基础的容器
docker run -d -P --name logstash --net elk logstash:7.12.1
3.拷贝文件到宿主机
3.1进入容器
docker exec -it logstash /bin/bash
查看下logstash的默认配置文件,端口默认是5044
3.2拷贝文件
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/
3.3修改配置文件
vim /opt/elk/logstash/config/logstash.yml
修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址: http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://192.168.159.128:9200" ]
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://192.168.159.128:9200"] index => "elk" # 索引名称 } }
3.4删除基础容器
docker rm -f logstash
4. 创建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/:/usr/share/logstash/pipeline logstash:7.12.1
六、测试
1.访问kibana,设置索引模式
选择elk索引,创建索引模式
2.造一条测试数据
在当前目录下创建一个json文件,名字为test.json
{ "id": 1, "name": "Tom", "birthday": "1990-01-01", "address": { "province": "Beijing", "city": "Beijing", "district": "Chaoyang" }, "scores": [80, 90, 85], "is_male": true }
3.发送测试数据
curl -XPOST -H "Content-Type: application/json" -d @test.json http://192.168.159.128:5044
4.查看数据
后台使用curl查看elk索引,显示已有内容
kibana上的discover上选择elk索引,查到了之前发送的json测试数据