博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Docker+ELK集中处理日志
阅读量:6847 次
发布时间:2019-06-26

本文共 2855 字,大约阅读时间需要 9 分钟。

hot3.png

https://github.com/deviantony/docker-elk

手头有几个服务器的日志需要处理,数据量也不是很大,但是又不想在每个服务器上都装一套ELK,毕竟这货还是挺笨重的。

另外,ELK这堆东西依赖也挺多,而且还是用JAVA的,我才不想为了装这个把系统搞得乱七八糟,所以必须跑在docker里。当然,也不可能在每台服务器上都装个docker,毕竟这货也不是省油的灯。

于是有这样的方案。

Docker

以两个服务器为例,docker装在A服务器上,在其中跑ELK,两台服务器的日志都汇总到这个跑ELK的docker container里。

image

其本思路就是把docker里的ELK作为一个独立日志服务器来用。

首先,docker里的ELK container绑定一个Filebeat的5044端口到A服务器上,这样只有所有日志源都通过Filebeat往这里推送即可。

注意,这个端口可以用默认的 -p 5044:5044 ,但是Kibana的端口不建议这样干,最好还是绑定到localhost,类似: -p 127.0.0.1:5601:5601 ,最后通过https返向代理到本地端口,当然最好再加上用户权限控制。这样比较安全。

另外,因为两个服务器之前通过internet通讯,所以安全性是一个需要处理的问题,Filebeat通讯需要加上证书加密。

证书

先来生成一套自己的证书。

sudo openssl req -subj '/CN=elk.yourdomain.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout tls/logstash-beats.key -out tls/logstash-beats.crt

其中elk.yourdomain.com换成你自己的一个域名,指向A服务器。

ELK端

docker的安装配置就不说了,ELK用的是现成的  ,直接:

docker pull sebp/elk

即可安装。

不过默认配置是不够用的,还是需要自己加点配置,所以写了个简单的Dockerfile来用用:

FROM sebp/elkMAINTAINER raptor
ADD tls/logstash-beats.crt /etc/pki/tls/certs/ADD tls/logstash-beats.key /etc/pki/tls/private/

这里略去了一些我自己定义的配置项目,只保留与本文有关的部分,就是更换了两个证书文件。这就是为了解决前面所说的安全性问题。

构建成功这个Dockerfile以后就可以启动它:

docker run -d -p 5044:5044 -p 127.0.0.1:5601:5601 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -v /var/data/elk:/var/lib/elasticsearch --name=elk myelk

除了前面说过的端口号问题,这里还增加了一个volume绑定,以免重启container以后ES的数据丢失。

日志端

接下来在A、B两个服务器上配置日志源。

首先当然是安装一个Filebeat(仅以debian系为例),文档里提供了下载方式安装:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.2-amd64.debsudo dpkg -i filebeat-5.5.2-amd64.deb

其实用增加源的方式更方便一些,比如以后需要升级的时候:

echo "deb https://artifacts.elastic.co/beats/apt stable main" | sudo tee -a /etc/apt/sources.list.d/beats.listsudo apt-get updatesudo apt-get install filebeat

如果报错说apt不支持https,则需要安装一下:

sudo apt-get install apt-transport-https

如果报错说key不对,则需要加一下:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

然后需要把crt证书复制一份过来,放到如 /etc/pki/tls/certs/ 下。

最后配置一下Filebeat,配置文件在: /etc/filebeat/filebeat.yml

filebeat:  prospectors:    -      paths:        - /var/log/nginx/access.log      input_type: log      document_type: nginx-access      scan_frequency: 10s      harvester_buffer_size: 16384      max_bytes: 10485760  registry_file: /var/lib/filebeat/registryoutput:  logstash:    hosts: ["elk.yourdomain.com:5044"]    worker: 1    bulk_max_size: 2048    compression_level: 3    index: filebeat    tls:      certificate_authorities: ["/etc/pki/tls/certs/logstash-beats.crt"]shipper:logging:  files:    rotateeverybytes: 10485760

然后重启filebeat:

service filebeat restart

重启后,本机的nginx/access.log就会被filebeat自动地发送到elk.yourdomain.com:5044去。

如不成功,请自行查阅系统日志进行分析,通常都是因为证书配置不对导致。

更多的日志源服务器也都可以这样配置,只要它们能通过域名访问到运行ELK container的A服务器。因为证书是绑定域名的,所以只能通过域名访问,包括A服务器自己。如果A服务器不能通过域名访问自己(比如解析出来的是外网地址,而路由器不支持的话),可以用 /etc/hosts 把域名解析到127.0.0.1。

转载于:https://my.oschina.net/mickelfeng/blog/1808058

你可能感兴趣的文章
常用应用软软件
查看>>
UTF-8 带签名和不带签名的区别
查看>>
php错误级别的设置方法
查看>>
C# WinForm开发系列学习 地址 很详细
查看>>
WIN10常用快捷键
查看>>
详细理解servlet实现的几种方式和生命周期
查看>>
黄聪:C#带cookie模拟登录百度
查看>>
JavaScript——HashMap实现
查看>>
maven 检查依赖冲突和版本冲突
查看>>
待解决问题
查看>>
使用icon替换你的网页图标(转)
查看>>
Android权限管理之Android 6.0运行时权限及解决办法
查看>>
图片像素与大小
查看>>
linux磁盘读写性能优化
查看>>
android webview
查看>>
masscan
查看>>
html5--1.5 文本元素
查看>>
oracle 正则表达式
查看>>
《设计模式之禅》--单例扩展:多例模式
查看>>
Win8 Metro(C#)数字图像处理--2.39二值图像投影
查看>>