对于想了解最新docker下整合ELKElasticSearch+filebeat+logstash+kibana的读者,本文将提供新的信息,我们将详细介绍版本7.14.0,并且为您提供关于Docke
对于想了解最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana的读者,本文将提供新的信息,我们将详细介绍版本 7.14.0,并且为您提供关于Docker 安装 ElasticSearch+Logstash+Kibana、Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统、Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)、Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)的有价值信息。
本文目录一览:- 最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana(版本 7.14.0)(elk docker集群版)
- Docker 安装 ElasticSearch+Logstash+Kibana
- Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统
- Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)
- Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana(版本 7.14.0)(elk docker集群版)
环境与前言
centos7.x docker 20.x elk+filebeat 统一是 7.14.0 本人大三,在一家小公司实习,最近公司里发版测试环境使用 docker, 觉得是时候学习一下 docker 了 于是学习了一下 docker 不得不说上手之后很香。推荐到菜鸟教程学习,连接:Docker 教程。学习完了部署了一下 elk,也是在实习的时候接触到的,elk 可以收集过滤分析日志,学习了一下。附上官网连接:ElasticSearch: 权威指南 Logstash 文档 Kibana 文档 Filebeat 文档 目前来说我只是单纯的使用,没有太过认真的去攻读这些文档,我只读了我用到的和一些配置的章节。以后有时间在慢慢学习下去吧,对这一块还算有点兴趣。
架构简介
简介与他们之间的联系
Elasticsearch
: 是一个分布式、RESTful 风格的搜索和数据分析引擎。Logstash
: 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。Kibana
: 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。Filebeat
: 无论是从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat
都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。
联系草图:
描述: 通过 filebeat
从文件控制台等日志源中收集日志,发送给 logstash
,logstash
进行过滤存储到 elasticsearch
,kibana
重 elasticsearch
中读取数据进行分析处理等。
个人认为日志这东西是非常重要的,开发过程中程序跑不完善的日志可以快速排查定位错误原因。线上就更不用说了,没有错误日志咋死的都不知道。用过 log4j 的都说好,本次实验就使用 log4j 将日志输出到文本中。然后通过 filebeat 收集日志,再通过 filebeat 输出到 logstash,logstash 有过滤的能力,在通过 logstash 输出到 elasticsearch 进行存储,在通过 Kibana 查看分析什么的。废话讲完下面开始操作。
镜像下载
说明也许多年后的你看到这篇文章这里的很多东西都已经过时了,但整个流程应该不会相差甚远,希望能帮你找到真个思路而不是 ctrl cv。
ElasticSearch
docker 中查找镜像 docker search [你想找地镜像]
docker search elasticearch
也可以去
Docker Hub
搜索:
点进去能看到版本号 我直接下载最新版 7.14.0
docker pull elasticearch:7.14.0
access denied for elasticearch, repository does not exist or may require ''docker login'': denied: requested access to the resource is denied 报这个错你就 docker login 登录 至于没有账号就去注册。下面的下载都是这样不在赘述。
filebeat
拉取镜像:
docker pull docker.elastic.co/beats/filebeat:7.14.0
logstash
拉取镜像:
docker pull logstash:7.14.0
kibana
拉取镜像:
docker pull kibana:7.14.0
下载完成运行命令看一眼
docker images
配置运行
顺序说明
说一下,按我的习惯是按照依赖的顺序来启动的。聪明的你想按照什么顺序都一样。
1 . Elasticsearch
启动
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d --net elk-net --name es elasticsearch:7.14.0
参数说明 : -p : 端口映射,将本机的 9200 映射到容器里的 9200 端口,访问 localhost:9200 就会访问到容器的 9200. -e 环境变量 意思是将 elasticsearch 设置成单机运行 -d : 后台运行,--net :设置网络属于 elk-net (你要是没有的话去简历或者不填这个配置)--name 设置容器的名字,不然的话默认一大串字母每次看日志还要 ps 一下多恶心你说是吧。
查看启动情况
两种方式:
- docker ps -a
STATUS 顾名思义状态,是 UP 就 ok,不是的话使用第二种方式看启动日志看看报的什么错然后去百度怎么解决。
- docker logs -f es
当然可以直接访问机器
ip:9200
查看有没有跑起来。
到此为止用来存储的 Elasticsearch 启动完成丢在一边就完事了。值得一提的是,写这篇文章的时候,作者仅仅在摸鱼时(实习除了 crud 还是想弄一弄其他东西的,嘎嘎嘎)刚搭建完成最基本的 elk,能跑,有许多配置包括安全什么的作者都没有去配置,这仅仅只是一篇没有营养的搭建教程。
2 . Kibana
编辑配置文件
在本地新建一个 kibana 的配置文件对应 kibana 中的 /config/kibana.yml
// 递归创建文件夹
mkdir -p /home/docker/elk/kibana
// 创建编辑配置文件
vi /home/docker/elk/kibana/kibana.yml
这是 kibana.yml
内容:
server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://你的ip:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
朋友,记得把‘’你的 ip‘’换成你的机器 ip
启动
docker run -v /home/docker/elk/kibana:/config -p 5601:5601 -d --net elk-net --name kibana kibana:7.14.0
参数解释: :-v
: 挂载本地的文件夹到容器中 config 文件夹 -p
: 端口映射 -d
: 后台运行 --net
:将容器加入指定网络 --name
: 给容器起个名字。
查看启动效果
- docker ps -a
- docker logs -f kibana
- 浏览器访问 http:// 你的 ip:5601 如果一切顺利你将看到如下画面:
小提示:也许你在按照上面步骤 ctrl cv 之后并没有达到预期的效果,这是很正常的,生活总会事与愿违,你可能会看到页面一行没有准备好的英文,你在 logs 看到日志里有 error 告诉你 elasticsearch 节点信息查询不到等等等等。直接百度。作者也做过很多尝试,给你看看 history,
最后在 es 节点自测没有问题的情况下,我给你提供一个最终的解决方案。进入容器,直接修改容器里的配置文件,保存退出后重启容器,命令如下:进入容器:
bash docker exec -it kibana /bin/bash
打开/config/kibana.yml
配置文件:bash vi /config/kibana.yml
如果你打开看到elasticsearch.hosts: [ "elasticsearch:9200" ]
那说明问题就出现在这,这是默认的,你只需要把elasticsearch
改成你自己的地址,保存退出:wq
输入exit
退出容器,输入docker restart kibana
重启容器即可。
至此 elasticsearch 和 kibana 启动完成。至于在 kibana 中操作查看 es 的内容自行百度,或者直接看官网也是可以的。 下面是 filebeat
和 logstash
的启动:
3 . Logstash
配置文件
// 创建配置文件的文件夹
mkdir -p /home/docker/elk/logstash/
// 创建并编辑配置文件
vim /home/docker/elk/logstash/logstash.yml
vim /home/docker/elk/logstash/logstash.conf
logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: elasticsearch机器的ip:9200
logstash.conf
input {
beats {
port => 4567
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
hosts => ["http://elasticsearch机器ip:9200"] #ElasticSearch host, can be array.
index => "logapp-%{+YYYY.MM}" #The index to write data to.
}
}
启动
docker run -d -p 4567:4567 --net elk-net --name logstash -p 5044:5044 -p 5045:5045 -v /home/docker/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /home/docker/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.14.0
小提示:配置文件中分为三个模块,
input
,filter
,output
很好理解,就是把东西通过input
输入,通过filter
过滤,通过output
输出。其中 input 中的beats
插件就是我们下面要启动的filebeat
。filebeat
通过 4567 端口将收集的日志发送给logstash
, 当然想用哪个端口随便你。 启动完别忘了看看有没有启动成功,docker ps ...,docker logs ....
4 . Filebeat
配置文件
新建需要收集的日志文件:
mkdir -p /var/log/logapp
vim /var/log/logapp/app.info.log
然后在里面随便写点东西,我就写了一个 test, 真实环境中我们往往会收集 nginx,java 应用等的日志文件,这里我们就直接新建模拟一下了。
mkdir -p /home/docker/elk/filebeat/
vim /home/docker/elk/filebeat/filebeat.yml
filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/logapp/app.info.log
output.logstash:
hosts: ["logstash的ip:4567"]
注意:这里把你的 ip 换上去,这就是前面
logstash
配置文件input1
中beats
监听的端口。 这里的缩进什么的都别丢了,严格按照yaml
格式,不然就会报错。input
中就是要收集的东西,我们收集一个刚刚我们新建的日志,paths
里填上刚刚新建的日志文件的地址。
启动
docker run -u root -v /var/log/logapp:/var/log/logapp:rw -v /home/docker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -e setup.kibana.host=你的kibana机器的ip:5601 -d --name filebeat --net elk-net docker.elastic.co/beats/filebeat:7.14.0
注意:记得把 ip 换成你的 kibana 的 ip。 到此全部正常的话就算是整合完成了。让我们打开 kibana 操作一波看一下效果。
查看效果
浏览器输入 http://kibana 的 ip:5601 进入 kibana:
选择管理:
选择索引配置:
创建:
输入之前配置文件中写的 logapp 下一步:
选择时间戳创建:
点击侧边栏,选择 Discover:
选择刚刚创建的 pattern:
这一条数据就是创建文件是写的 test:
这时去 echo 写入一条 hello elk 回到 kibana 查看:
搜索一下:
好了,至此 elk 的基础搭建就完成了。至少是跑起来了,至于想要实现些什么,就去配置文件里配置就行。
Docker 安装 ElasticSearch+Logstash+Kibana
为啥装这套东西?
原因:Logstash收集系统日志,将日志以json的形式发送给ElasticSearch存储,用Kibana客户端打开来查看日志信息。
不用Docker大概弄个半天以上,现在10分钟搞定。
1、下载镜像文件
docker pull elasticsearch:5.6.11 docker pull kibana:5.6.11 docker pull logstash:5.6.15
2、创建实例
ElasticSearch
mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-xms256m -Xmx256m" \ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -d elasticsearch:5.6.11
特别注意:
-e ES_JAVA_OPTS="-xms256m -Xmx256m" \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES
Kibana
docker run --name kibana -e ELASTICSEARCH_URL=http://192.168.31.128:9200 -p 5601:5601 \ -d kibana:5.6.11
Logstash
mkdir -p /mydata/logstash vim /mydata/logstash/logstash.conf
1)、在mydata/logstash中创建logstash.conf文件:文件内容如下
input { tcp { port => 4560 codec => json_lines } } output{ elasticsearch { hosts => ["192.168.31.128:9200"] index => "applog" } stdout { codec => rubydebug } }
2)启动
docker run -d -p 4560:4560 \ -v /mydata/logstash/logstash.conf:/etc/logstash.conf \ --link elasticsearch:elasticsearch \ --name logstash logstash:5.6.15 \ logstash -f /etc/logstash.conf
3)检查是否有logstash-codec-json_lines插件,如果没有侧安装
安装插件:
https://github.com/logstash-plugins
docker exec –it logstash /bin/bash cd /usr/share/logstash/bin
查看插件
logstash-plugin list
安装插件
logstash-plugin install logstash-codec-json_lines
Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统
一、系统的基本架构
在以前的博客中有介绍过在物理机上搭建 ELK 日志分析系统,有兴趣的朋友可以看一看 -------------->> 链接戳我 <<。这篇博客将介绍如何使用 Docker 来更方便快捷的搭建,架构图如下:
说明:WEB 服务器代表收集日志的对象,由 Filebeat 收集日志后发送给 Logstash2,再由 Logstash2 发送至 Redis 消息队列,然后由 Redis 发送至 Logstash1,最后由 ElasticSearch 收集处理并由 Kibana 进行可视化显示。这里之所以需要两层 Logstash 是因为 WEB 服务器可以是任何服务器,可能会出现多个不同日志需要分析。这个架构可以用在较大规模的集群中,在生产中可以将各个功能单点进行扩展,例如将 Redis 和 Logstash 集群化。
二、Docker 搭建 ES 集群
默认系统已安装好 docker,创建 ES 集群 docker 挂载目录,编辑配置文件:
~]# mkdir -pv /root/elk/{logs,data,conf}
vim /root/elk/conf/elasticsearch.yml
cluster.name: es5.6-cluster #集群识别名,在一个集群中必须同名
node.name: node1 #节点标识
network.host: 192.168.29.115 #节点IP
http.port: 9200 #监听端口
discovery.zen.ping.unicast.hosts: ["192.168.29.115", "192.168.29.116"] #集群节点
http.cors.enabled: true
http.cors.allow-origin: "*"
~]# docker container run --name es5.6 \
--network host \
-v /root/elk/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /root/elk/data/:/usr/share/elasticsearch/data/ \
-v /root/elk/logs/:/usr/share/elasticsearch/logs/ \
-p 9200:9200 \
-p 9300:9300 \
-d --rm docker.io/elasticsearch:5.6
安装 ElasticSearch-head,查看 ES 集群是否安装成功:
~]# docker container run --name es-head -p 9100:9100 -d --rm mobz/elasticsearchhead:5
三、Docker 安装 Filebeat
编辑 Filebeat 配置文件,把配置文件、log 挂载至 docker 卷,,定义要送至 Logstash 的 log 文件与输出目标:
vim /root/filebeat/conf/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/messages
exclude_lines: ["^DBG"]
document_type: system-log-0019
- input_type: log
paths:
- /var/log/nginx/access.log
document_type: nginx-log-0019 #相对的是logstash中的type,可以在Logstash中做if判断
output.logstash:
hosts: ["192.168.29.119:5044","192.168.29.119:5045"]
enabled: true
worker: 1
compression_level: 3
loadbalance: true
~]# docker container run --name filebeat --network host \
-v /root/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /var/log/messages:/var/log/messages \
-v /var/log/nginx/access.log:/var/log/nginx/access.log \
--rm -d docker.elastic.co/beats/filebeat:5.6.15 \
filebeat -c /usr/share/filebeat/filebeat.yml
四、Docker 安装 Logstash
docker container run --name logstash \
-p 9600:9600 \
-v /var/log/nginx/access.log:/var/log/nginx/access.log \
-v /var/log/messages:/var/log/messages \
-v /root/logstash/pipeline/stdout.conf:/etc/logstash/conf.d/stdout.conf \
-d --network host -it --rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf
Logstash 收集多个日志并输出示例(与此架构无关,只是示范示例):
vim /root/logstash/pipeline/stdout.conf
input {
file {
type => "nginxaccesslog"
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
file {
type => "syslog"
path => "/var/log/messages"
start_position => "beginning"
}
}
output {
if [type] == "nginxaccesslog" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "nginx-log-0018-%{+YYYY.MM.dd}"
}
}
if [type] == "syslog" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "syslog-0018-%{+YYYY.MM.dd}"
}
}
}
配置 Logstash2 上的输入输出配置:
这里先进行测试,用 Filebeat 收集 WEB 服务器上的 /var/log/messages 与 /var/log/nginx/access.log 日志并进行标准输出,配置如下:
vim /root/logstash/conf/stdout.conf
input {
beats {
port => 5044
codec => "json"
}
beats {
port => 5045
codec => "json"
}
}
output {
stdout {
codec => "rubydebug"
}
}
启动 Logstash2 并查看是否可读取日志并输出:
docker container run --name logstash \
-p 9600:9600 \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf
如截图所示便是正常:
可以看到 /var/log/messages 与 /var/log/nginx/access.log 都能正常收集并输出。
五、Docker 安装 Redis
修改配置:
vim /root/redis/conf/redis.conf
bind 0.0.0.0
port 6379
requirepass 123456 #配置密码
save ""
pidfile /var/run/redis/redis.pid
logfile /var/log/redis/redis.log #注意权限
运行:
~]# docker container run --name redis \
-v /root/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /root/redis/log/redis.log:/var/log/redis/redis.log \
-v /root/redis/run/redis.pid:/var/run/redis/redis.pid \
-v /root/redis/data/:/data/ \
-p 6379:6379 --network host -d \
docker.io/redis:4 redis-server /usr/local/etc/redis/redis.conf
六、Docker 启动并配置 Logstash2 收集多日志并送至 Redis
vim /root/logstash/conf/stdout.conf
input {
beats {
port => 5044
codec => "json"
}
beats {
port => 5045
codec => "json"
}
}
output {
if [type] == "system-log-0019" {
redis {
data_type => "list"
host => "192.168.29.117"
port => "6379"
key => "system-log-0019"
db => "4"
password => "123456"
}
}
if [type] == "nginx-log-0019" {
redis {
data_type => "list"
host => "192.168.29.117"
port => "6379"
key => "nginx-log-0019"
db => "4"
password => "123456"
}
}
}
再次启动 Logstash2:
~]# docker container run --name logstash \
-p 9600:9600 \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf
链接 Redis 查看日志是否已被收集
~]# redis-cli -h 192.168.29.117
192.168.29.117:6379> AUTH 123456
OK
192.168.29.117:6379> SELECT 4 #选择数据库号
OK
192.168.29.117:6379[4]> KEYS *
1) "nginx-log-0019" #可以看到日志已写入成功,这里是前面在Logstash中定义的key
2) "system-log-0019"
192.168.29.117:6379[4]> LLEN system-log-0019
(integer) 6400
192.168.29.117:6379[4]> LLEN nginx-log-0019
(integer) 313
也可以在 Redis 上查看是否连接:
~]# lsof -n -i:6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 14230 polkitd 6u IPv4 106595 0t0 TCP *:6379 (LISTEN)
redis-ser 14230 polkitd 7u IPv4 118204 0t0 TCP 192.168.29.117:6379->192.168.29.104:40320 (ESTABLISHED)
redis-ser 14230 polkitd 10u IPv4 109238 0t0 TCP 127.0.0.1:6379->127.0.0.1:52460 (ESTABLISHED)
redis-cli 17066 root 3u IPv4 117806 0t0 TCP 127.0.0.1:52460->127.0.0.1:6379 (ESTABLISHED)
以上步骤 log 文件走向:WEB→Filebeat→Logstash2→Redis。下面再来配置 Redis→Logstash1→ES→Kibana。
七、docker 配置 Logstash1
vim /root/logstash/conf/stdout.conf
input {
redis {
data_type => "list"
host => "192.168.29.117"
port => "6379"
key => "system-log-0019"
db => "4"
password => "123456"
}
redis {
data_type => "list"
host => "192.168.29.117"
port => "6379"
key => "nginx-log-0019"
db => "4"
password => "123456"
codec => "json"
}
}
output {
if [type] == "system-log-0019" { #用if判断来选择ES节点
elasticsearch {
hosts => ["192.168.29.115:9200"] #节点可以自定义
index => "system-log-0019-%{+YYYY.MM.dd}"
}
}
if [type] == "nginx-log-0019" {
elasticsearch {
hosts => ["192.168.29.115:9200"]
index => "nginx-log-0019-%{+YYYY.MM.dd}"
}
}
}
启动 Logstash1 并挂载配置:
~]# docker container run --name logstash \
-p 9600:9600 \
-v /root/logstash/conf/stdout.conf:/etc/logstash/conf.d/stdout.conf -it \
--network host \
--rm docker.io/logstash:5.6 \
-f /etc/logstash/conf.d/stdout.conf
查看 Redis 中的数据是否已被 ES 取走:
192.168.29.117:6379[4]> LLEN nginx-log-0019
(integer) 0
192.168.29.117:6379[4]> LLEN system-log-0019
(integer) 0
以上 Redis 显示说明数据已被 ES 取走。
八、docker 启动并配置 Kibana
配置 Kibana:
vim /etc/kibana/kibana.yml
server.host: "127.0.0.1"
elasticsearch.url: "http://192.168.29.115:9200"
启动 Kibana:
~]# docker container run --name kibana \
-v /etc/kibana/kibana.yml:/etc/kibana/kibana.yml \
--network host \
-p 5601:5601 \
-d --rm kibana:5.6
为安全起见,这里建议用 Nginx 加密返代 Kibana 进行访问。
最后在 Kibana 中添加 index 就能访问并搜索采集的日志了:
原文出处:https://www.cnblogs.com/readygood/p/10512342.html
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
# 增加下面的配置 (收集 .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
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.1.1
# 下载镜像 查看镜像
docker pull elasticsearch:7.1.1
docker images
# 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create somenetwork
# 运行 elasticsearch
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.1.1
# 查看容器状态
docker ps
# 检测 elasticsearch 是否启动成功
curl 127.0.0.1:9200
Elasticsearch 安装启动完成
二、Docker 安装 Kibana
官网镜像地址:https://hub.docker.com/_/kibana
使用和 elasticsearch 相同版本镜像 7.1.1 (不一样可能会出现问题)
# 下载镜像 查看镜像
docker pull kibana:7.1.1
docker images
注意:在本例中,Kibana使用默认配置,并希望连接到正在运行的Elasticsearch实例http://localhost:9200
# 运行 Kibanadocker run -d --name kibana --net somenetwork -p 5601:5601 kibana:7.1.1
# 查看容器启动状态
docker ps
访问 http://127.0.0.1:5601 (启动可能会较慢,如失败等几秒再尝试刷新一下)
Kibana 安装启动完成
三、Docker 安装 Logstash
官网镜像地址:https://hub.docker.com/_/logstash
使用同版本镜像 7.1.1
# 下载镜像 查看镜像
docker pull logstash:7.1.1
docker images
我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置
里面放了 logstash 的配置文件
logstash.yml (文件内容)
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
conf.d/test.conf (文件内容)
input {
beats {
port => 5044
codec => "json"
}
}
output {
elasticsearch { hosts => ["elasticsearch:9200"] }
stdout { codec => rubydebug }
}
启动 Logstash
记得映射上面两个目录 {path}
docker run -it -d -p 5044:5044 --name logstash --net somenetwork -v {path}/logstash.yml:/usr/share/logstash/config/logstash.yml -v {path}/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1
查看容器运行状态
docker ps
启动成功
四、Docker 安装 Filebeat
官网镜像地址:https://hub.docker.com/_/filebeat
使用同版本镜像 7.1.1
# 下载镜像 查看镜像
docker pull store/elastic/filebeat:7.1.1
docker images
# 下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml
# 打开配置文件
vim filebeat.docker.yml

# 增加下面的配置 (收集 .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
# 查看容器启动状态docker ps
启动成功
现在去 Kibana 查看数据,已经有数据了
(大家不要拿来命令就执行啊,中间有些路径之类的要自己改改。)
到此 最基本的几个软件通讯配置 结束了。
还有很多要探索的地方。
待续...
我们今天的关于最新 docker 下整合 ELK ElasticSearch+filebeat+logstash+kibana和版本 7.14.0的分享已经告一段落,感谢您的关注,如果您想了解更多关于Docker 安装 ElasticSearch+Logstash+Kibana、Docker 搭建 ElasticSearch+Redis+Logstash+Filebeat 日志分析系统、Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)、Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)的相关信息,请在本站查询。
本文标签: