elk体验

安装

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",然后打开

1
http://<your-host>:5601

点击"创建",即可进入下一步。

查看日志

ElasticSearch

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

Kibana

1
http://vmubuntu.info:5601

添加日志

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

安装 filebeat

1
2
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

1
vim /etc/filebeat/filebeat.yml

在里面添加以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
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

1
service filebeat start

然后打开 kibana

设置图

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

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

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

图示为:

查询条件语法

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

ElasticSearch 如何识别出 nginx 的配置的

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

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

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

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

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

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

1
2
3
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 进行了解。

参考链接: