安装
docker pull sebp/elk
运行
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5000:5000 -it --name elk sebp/elk
配置
其实没什么配置,这里的 “配置”,只是往 logstash 中加入一条数据,从而可以进行后续的操作:
docker exec -it elk /bin/bash
执行
/opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'
这个是将 logstash 的输出导到 ElasticSearch 中,而数据是从标准输入来的。然后随便输入下东西,例如 “Hello World”,然后打开 http://<your-host>:5601
,点击”创建”,即可进入下一步。
查看日志
ElasticSearch
http://vmubuntu.info:9200/_search?pretty
Kibana
http://vmubuntu.info:5601
添加日志
添加日志一般将日志导入到 logstash 中,而因为 logstash 在 docker 中,所以本地的话需要加一个日志收集器 filebeat。
安装 filebeat
curl -L -O https://download.elastic.co/beats/filebeat/filebeat_1.2.3_amd64.deb
sudo dpkg -i filebeat_1.2.3_amd64.deb
配置 filebeat
vim /etc/filebeat/filebeat.yml
在里面添加以下内容:
output:
logstash:
enabled: true
hosts:
- elk:5044
tls:
certificate_authorities:
- /etc/pki/tls/certs/logstash-beats.crt
timeout: 15
filebeat:
prospectors:
-
paths:
- /var/log/syslog
- /var/log/auth.log
document_type: syslog
-
paths:
- "/var/log/nginx/*.log"
document_type: nginx-access
这样就可以了。然后启动 filebeat
service filebeat start
然后打开 kibana
设置图
首先要想添加一个 index,步骤如下:
图 1:添加索引 |
然后打开搜索,步骤分别是:
- 切换到 “Discover”
- 选择 index
- 添加过滤条件
- 添加显示的字段
- 点击搜索
- 查看内容
图示为:
图 2:搜索 |
查询条件语法
查询的条件语法可以参考链接中的 Apache Lucence - Query Parser Syntax,因为 kibana 对应的是 ElasticSearch,而 ES 是 Lucence 的封装,所以最终的语法还是 Lucence 的查询。
ElasticSearch 如何识别出 nginx 的配置的
这里需要说一下的是,命名我只指定了 filebeat 我的 log 位置,那么为什么我查询出来的时候居然有详细得 nginx 访问信息,例如客户端ip、浏览器版本等信息?
这里的关键就在于 filebeat 配置中的:
-
paths:
- "/var/log/nginx/*.log"
document_type: nginx-access
这一段,这里的 document_type 起了关键性的作用,我们进入 docker,然后打开文件 /etc/logstash/conf.d/11-nginx.conf
,里面的内容是:
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
}
然后再看一下文件: /opt/logstash/patterns/nginx
,里面的内容是:
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}
具体的含义可参考一下参考链接中的:logstash plugin - grok 进行了解。