Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)

Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)

ELK是由 Elasticsearch、Logstash和Kibana 三部分组件组成。

Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

Filebeat 是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到 Logstash 或 Elasticsearch。

Docker 镜像统一从 https://hub.docker.com/ 下载 (安装时请使用统一版本)

、Docker 安装 Elasticsearch

官网镜像地址:https://hub.docker.com/_/elasticsearch

找到目前最新的(Tags)是 7.8.0

# 下载镜像 查看镜像
docker pull elasticsearch:7.8.0
docker images

# 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create my-network 

# 运行 elasticsearch
docker run -d --name elasticsearch --net my-network  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0

# 查看容器状态
docker ps

# 检测 elasticsearch 是否启动成功
curl 127.0.0.1:9200

{
"name": "fa352b46a6b9",
"cluster_name": "docker-cluster",
"cluster_uuid": "48E5S_HZS2yLNiZojbQD6w",
"version": {
"number": "7.8.0",
"build_flavor": "default",
"build_type": "docker",
"build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date": "2020-06-14T19:35:50.234439Z",
"build_snapshot": false,
"lucene_version": "8.5.1",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}
{
name: "fa352b46a6b9",
cluster_name: "docker-cluster",
cluster_uuid: "48E5S_HZS2yLNiZojbQD6w",
version: {
number: "7.8.0",
build_flavor: "default",
build_type: "docker",
build_hash: "757314695644ea9a1dc2fecd26d1a43856725e65",
build_date: "2020-06-14T19:35:50.234439Z",
build_snapshot: false,
lucene_version: "8.5.1",
minimum_wire_compatibility_version: "6.8.0",
minimum_index_compatibility_version: "6.0.0-beta1"
},
tagline: "You Know, for Search"
}

Elasticsearch 安装启动完成

二、Docker 安装 Logstash

官网镜像地址:https://hub.docker.com/_/logstash

使用同版本镜像 7.8.0

# 下载镜像 查看镜像
docker pull logstash:7.8.0
docker images

我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置

创建目录 /root/docker-root/logstash/config/

创建文件 /root/docker-root/logstash/config/logstash.yml

logstash.yml 文件内容

path.config: /root/docker-root/logstash/conf.d/*.conf
path.logs: /root/docker-root/logstash/logs

创建文件 /root/docker-root/logstash/conf.d/test.conf

conf.d/test.conf (文件内容)

input {
    beats {
        port => 5044
        codec => "json"
    }
}

output {
  elasticsearch { hosts => ["192.168.0.160:9200"] }
  stdout { codec => rubydebug }
}

#########################
input {
    beats {
    port => 5044
    codec => "json"
}
}

output {
  elasticsearch { hosts => ["elasticsearch:9200"] }
  stdout { codec => rubydebug }
}

启动 Logstash

docker run -d --restart=always --log-driver json-file --log-opt max-size=10m --log-opt max-file=2 -p 5044:5044 --name logstash -v /root/docker-root/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/docker-root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.8.0

三、Docker 安装 Kibana

官网镜像地址:https://hub.docker.com/_/kibana

使用和 elasticsearch 相同版本镜像 7.8.0 (不一样可能会出现问题)

# 下载镜像 查看镜像
docker pull kibana:7.8.0
docker images

##创建容器
docker run -d --name kibana --net my-network -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.0.160:9200  kibana:7.8.0

Kibana 安装启动完成

四、Docker 安装 Filebeat

官网镜像地址:https://hub.docker.com/_/filebeat

使用同版本镜像 7.8.0

# 下载镜像 查看镜像
docker pull store/elastic/filebeat:7.8.0
docker images
# 下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml

# 打开配置文件
vim filebeat.docker.yml
img
# 增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
# 这个地方的 .log 要保证有几条测试数据
filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /var/log/nginx/*.log

output.logstash:
  hosts: ['{ip}:5044']
 
# 运行Filebeat

# 请更改下面两个路径
{nginx-path} = 本地的日志文件目录(映射到容器中 作为数据源)
{path} = Filebeat配置文件路径 
{ip} = elasticsearch 地址
docker run --name filebeat --user=root -d --net somenetwork --volume="{nginx-path}:/var/log/nginx/" --volume="{path}/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" store/elastic/filebeat:7.1.1
 

现在去 Kibana 查看数据,已经有数据了

Kibana 报错解决办法

在浏览器中输入 http://192.168.0.160:5601/ 页面报错 Kibana server is not ready yet

启动后报错

Kibana server is not ready yet

打印日志,报错:

#打印日志命令
[root@localhost ~]# docker logs kibana
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://172.17.0.2:9200/"}
{"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}

进入kibana容器中

docker exec -it kibana /bin/bash
bash-4.2$ ping 172.17.0.2    #没有问题,能ping通
...
bash-4.2$ curl http://120.79.43.44:9200
curl: (7) Failed connect to 120.79.43.44:9200; No route to host

问题就出在这里!容器之间无法进行通信,猜测是防火墙的问题,再单独搜索这个问题,找到了解决的方案

解决办法如下:

#配置docker0服务到受信任连接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#停止NetworkManager(检测网络、自动连接网络的程序)服务
[root@localhost ~]# systemctl stop NetworkManager.service
#修改docker网络接口为内部区域(永久)
[root@localhost ~]# firewall-cmd --permanent --zone=trusted --change-interface=docker0
success
#启动NetworkManager(检测网络、自动连接网络的程序)服务
[root@localhost ~]# systemctl start NetworkManager.service
#配置docker0服务到受信任连接
[root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
#重启docker服务
[root@localhost ~]# systemctl restart docker.service

参考:

https://www.cnblogs.com/fbtop/p/11005469.html
https://www.cnblogs.com/hackyo/p/9951684.html
https://www.cnblogs.com/linjiqin/p/12103645.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342