安装

  1. docker pull sebp/elk

运行

  1. docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5000:5000 -it --name elk sebp/elk

配置

其实没什么配置,这里的 “配置”,只是往 logstash 中加入一条数据,从而可以进行后续的操作:

  1. docker exec -it elk /bin/bash

执行

  1. /opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost"] } }'

这个是将 logstash 的输出导到 ElasticSearch 中,而数据是从标准输入来的。然后随便输入下东西,例如 “Hello World”,然后打开 http://<your-host>:5601,点击”创建”,即可进入下一步。

查看日志

ElasticSearch

  1. http://vmubuntu.info:9200/_search?pretty

Kibana

  1. http://vmubuntu.info:5601

添加日志

添加日志一般将日志导入到 logstash 中,而因为 logstash 在 docker 中,所以本地的话需要加一个日志收集器 filebeat

安装 filebeat

  1. curl -L -O https://download.elastic.co/beats/filebeat/filebeat_1.2.3_amd64.deb
  2. sudo dpkg -i filebeat_1.2.3_amd64.deb

配置 filebeat

  1. vim /etc/filebeat/filebeat.yml

在里面添加以下内容:

  1. output:
  2. logstash:
  3. enabled: true
  4. hosts:
  5. - elk:5044
  6. tls:
  7. certificate_authorities:
  8. - /etc/pki/tls/certs/logstash-beats.crt
  9. timeout: 15
  10. filebeat:
  11. prospectors:
  12. -
  13. paths:
  14. - /var/log/syslog
  15. - /var/log/auth.log
  16. document_type: syslog
  17. -
  18. paths:
  19. - "/var/log/nginx/*.log"
  20. document_type: nginx-access

这样就可以了。然后启动 filebeat

  1. service filebeat start

然后打开 kibana

设置图

首先要想添加一个 index,步骤如下:

图 1:添加索引

然后打开搜索,步骤分别是:

  1. 切换到 “Discover”
  2. 选择 index
  3. 添加过滤条件
  4. 添加显示的字段
  5. 点击搜索
  6. 查看内容

图示为:

图 2:搜索

查询条件语法

查询的条件语法可以参考链接中的 Apache Lucence - Query Parser Syntax,因为 kibana 对应的是 ElasticSearch,而 ES 是 Lucence 的封装,所以最终的语法还是 Lucence 的查询。

ElasticSearch 如何识别出 nginx 的配置的

这里需要说一下的是,命名我只指定了 filebeat 我的 log 位置,那么为什么我查询出来的时候居然有详细得 nginx 访问信息,例如客户端ip、浏览器版本等信息?

这里的关键就在于 filebeat 配置中的:

  1. -
  2. paths:
  3. - "/var/log/nginx/*.log"
  4. document_type: nginx-access

这一段,这里的 document_type 起了关键性的作用,我们进入 docker,然后打开文件 /etc/logstash/conf.d/11-nginx.conf,里面的内容是:

  1. filter {
  2. if [type] == "nginx-access" {
  3. grok {
  4. match => { "message" => "%{NGINXACCESS}" }
  5. }
  6. }
  7. }

然后再看一下文件: /opt/logstash/patterns/nginx,里面的内容是:

  1. NGUSERNAME [a-zA-Z\.\@\-\+_%]+
  2. NGUSER %{NGUSERNAME}
  3. 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 进行了解。

参考链接: