filebeat+elasticsearch+logstash+kibana收集系统日志(docker)

1.使用的软件

我们这里用到的是filebeat+elk(elasticsearch+logstash+kibana)来进行系统日志的收集。filebeat安装在各个服务器中,Logstash+ElasticSearch+Kibana安装在一台专门用于基础服务的服务器上。

其架构如下
filebeat+ELK.png

2.各软件说明

2.1 filebeat

Filebeat是一个轻量级的托运人,用于转发和集中日志数据. Filebeat作为代理安装在服务器上,监视您指定的日志文件或位置,收集日志事件,并将它们转发到ElasticSearchLogstash进行索引.

官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/beats/filebeat/current/index.html

2.2 Logstash

Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。

官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/logstash/current/index.html

2.3 ElasticSearch

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库--无论是开源还是私有。

官方中文文档:https://s0www0elastic0co.icopy.site/guide/en/elasticsearch/reference/current/index.html

《Elasticsearch:权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

2.4 Kibana

Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

官方中文文档:https://www.elastic.co/guide/cn/kibana/current/index.html

3.配置文件说明

3.1 nginx配置文件

nginx.conf中设置日志文件格式:

 log_format  main  $time_iso8601 | $remote_addr | $http_host | $request_method | $request_uri | $server_protocol | $status | $body_bytes_sent | $http_referer | $http_user_agent | $request_time |;
​
access_log /var/log/nginx/access.log main;

各字段解释:访问时间和时区 | 客户端ip | 请求地址(浏览器输入的ip或域名) | http请求方法(get或post等) | 客户端请求的原始uri | 服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1 | http状态码 | 传给客户端的字节 | url跳转来源,用来记录从那个页面链接访问过来的 | 用户浏览器信息 | 客户端请求时间 |

修改完成后,通过sudo nginx -t来检查配置文件是否正确,然后sudo nginx -s reload来重启

3.2 filebeat配置文件

filebeat各系统安装教程详见官方文档。

我这里安装的deb包(rpm包也同样),配置文件在/etc/filebeat/filebeat.yml,

filebeat.inputs: #filebeat的输入部分
​
- type: log #输入的类型
​
 enabled: true #filebeat6.0之后需要设置为true
​
 #收集的日志路径
 paths: 
 - /var/log/nginx/access.log
 #
 fields: #额外添加的字段 添加字段用来logstash输出时判断传入哪个索引
 log_source: yg_access
 log_type: accesslog
​
 tags: ["yg-accesslog"] #分组标志 该信息用于logstash对该组数据进行处理
​
 #scan_frequency: 1s
 close_inactive: 1m
​
- type: log
​
 enabled: true
​
 paths:
 - /var/log/nginx/error.log
​
 fields:
 log_source: yg_error
 log_type: errorlog
​
 tags: ["yg-errorlog"]

 output.logstash:
 # The Logstash hosts 输入到logstash
 hosts: ["172.16.1.1:5044"]

filebeat命令:

systemctl start filebeat              #启动filebeat服务
systemctl enable filebeat             #设置开机自启动
systemctl disable filebeat            #停止开机自启动
systemctl status filebeat             #查看服务当前状态
systemctl restart filebeat           #重新启动服务
3.3 logstash配置
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -d --restart=always -v /usr/local/logstash:/etc/logstash -v /etc/localtime:/etc/localtime --name elk sebp/elk:624

参数介绍:

-p  指定容器和宿主机映射端口
 5601:  kibana服务端口 HTTP  (web访问)
 9200: Elasticsearch 开发端口 HTTP,保存数据到Elasticsearch中使用
 5044: logstash  收集日志端口 TCP
-d 后台运行
--restart=always docker重启是总是运行
-v  挂载目录 可以将logstash 的配置文件挂载在宿主机的目录上,方便随时修改,修改后的配置文件会同步到容器中。
 挂载 /etc/localtime 该目录是为了保证容器和宿主机的时区相同。
 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
 现在镜像内就可以共享宿主机里的文件了。

在/usr/local/文件夹下依次创建logstash/conf.d/logstash.conf

input {
    beats {
        port => 5044
    }
}

filter {
        if "yg-accesslog" in [tags] {
                 grok {
                        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\|%{IP:remote_addr}\|%{DATA:http_host}\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
                }
                mutate {
                        convert => ["status","integer"]
                        convert => ["body_bytes_sent","integer"]
                        convert => ["request_time","float"]
                }
                geoip {
                        source=>"remote_addr"
                }
                useragent {
                        source=>"http_user_agent"
                }
        }
        #如果需要可以一些errorlog的处理语句
}

output {
   if [fields][log_type] == "accesslog" {
        elasticsearch {
                hosts => ["127.0.0.1:9200"]
                index => "yg-nginx-accesslog" ##根据不同的日志存入不同的索引中
        }
   }
   if [fields][log_type] == "errorlog" {
        elasticsearch {
                hosts => ["127.0.0.1:9200"]
                index => "yg-nginx-errorlog" ##对应es索引名
        }
   }
}

!!!注意:grok中的正则如果不符合日志的格式,需要及时修改正则

grok正则在线验证地址:http://grokdebug.herokuapp.com

正则代表的含义:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

配置成功后,执行如下命令重启docker中的logstash (有时会重启失败,多试几次吧)

docker exec elk /etc/init.d/logstash restart
3.4 kibana设置

在浏览器中输入 http://ip:5601 进入kibana

然后如下设置

kibana设置1.png

然后创建 index pattern

kibana设置2.png

然后选择@timestamp


kibana设置3.png

最后在Discover标签页就可以看到了

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

推荐阅读更多精彩内容