场景
随着容器的大量使用,现在docker已经在很多生产环境得到实践,不过,容器的日志,状态,确是一个大问题,我们知道,一般可以使用命令docker logs
来查看一个特定的容器,那如果想要收集当前机器所有容器的日志呢?难不成还要将所有应用都标准化一个日志组件出来,然后将日志挂载到特定目录,然后使用logstash 去收集?当然,这种方式不算特别的方便,那有没有相对方便的方式呢?当然是有的
ELK
- Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索。
- Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
上一周原理图大家更清晰一点
三个组件的功能简单来说是收集,整理,展示,其中,Elasticsearch在搜索领域相当的火,在做全文检索方面有相当好的应用,大家有兴趣的可以自己深入研究
使用
在使用前请确保安装好了docker
,docker-compose
,关于怎么安装,前面的文章也有讲过,如果不会,自己搜索解决,现在我们直接上docker-compose.yml
文件
logspout: image: gliderlabs/logspout:v3 command: 'syslog://logstash:5000' links: - logstash volumes: - '/var/run/docker.sock:/tmp/docker.sock' logstash: image: ludekvesely/logstash-json environment: - LOGSPOUT=ignore - DROP_NON_JSON=false - STDOUT=true ports: - "5000:5000" links: - elasticsearch kibana: image: kibana environment: - LOGSPOUT=ignore links: - elasticsearch ports: - '5601:5601' elasticsearch: image: elasticsearch environment: - LOGSPOUT=ignore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
logspout:
image: gliderlabs/logspout:v3
command: 'syslog://logstash:5000'
links:
- logstash
volumes:
- '/var/run/docker.sock:/tmp/docker.sock'
logstash:
image: ludekvesely/logstash-json
environment:
- LOGSPOUT=ignore
- DROP_NON_JSON=false
- STDOUT=true
ports:
- "5000:5000"
links:
- elasticsearch
kibana:
image: kibana
environment:
- LOGSPOUT=ignore
links:
- elasticsearch
ports:
- '5601:5601'
elasticsearch:
image: elasticsearch
environment:
- LOGSPOUT=ignore
|
在docker-compose.yml所在的目录下,使用命令sudo docker-compose up -d
,然后我们用浏览器打开http://127.0.0.1:5601/
,就可以看到如下的界面
如图所示,等1,2都能正常使用的时候,选择create ,这样就会创建索引,我们选中Discover页面,就会看到日志的情况
补充
有人要问了,你这只是收集本机的docker日志,如果想要将A机器的运行日志收到到B机器呢?
假定B机IP为10.10.2.52
, 机器 A的docker-compose.yml
如下
image: gliderlabs/logspout:v3 command: 'syslog+tcp://10.10.2.52:5000' #links: # - logstash volumes: - '/var/run/docker.sock:/tmp/docker.sock'
|
image: gliderlabs/logspout:v3
command: 'syslog+tcp://10.10.2.52:5000'
#links:
# - logstash
volumes:
- '/var/run/docker.sock:/tmp/docker.sock'
|
这里使用tcp协议,将内容指向到B机的logstash暴露的端口,这样就可以正常的收集了
参考:https://github.com/ludekvesely/docker-logspout-elk
文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。
原文链接:brucedone.com/archives/1024
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)