Fork me on GitHub
Suzf  Blog

How-to Installation and configuration ELK Stack 5

前言

本文主要讲述的是 ELK Stack 5 的简易安装和配置。 Elasticsearch - 分布式的文档(document)存储引擎。它可以实时存储并检索复杂数据结构。 Kibana - 在 Elasticsearch 中分析和搜索数据信息的 bashboard Filebeat - 为 Elasticsearch 传送日志数据的轻量级的组件(基于  Logstash-Forwarder)。 关于 Elasticsearch 5 的安装 --> How-to Install elasticsearch with RPM on CentOS7

Kibana - Installation

如果之前没有安装过 ES, 下载并安装  public signing key :

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接着创建一个 repository

cat > /etc/yum.repos.d/elasticsearch.repo << EOF
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

现在我们 Kibana

# yum -y install kibana

我们需要修改一些默认的配置

# grep -v "^#\|^$" /etc/kibana/kibana.yml 
server.port: 5601
server.host: "172.16.9.50"
server.name: "elk.suzf.net"
elasticsearch.url: "http://172.16.9.50:9200"

设置开机自启并启动服务

# systemctl daemon-reload
# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
# systemctl start kibana.service

现在我们查看一下 Kibana 的端口

# ss -ntlp | grep 5601
LISTEN     0      128    172.16.9.50:5601                     *:*                   users:(("node",pid=3327,fd=9))

我们应该检查一下状态信息以确保正如我们所期望的那样。

http://172.16.9.50:5601/status

kibana_status

Filebeat - Installation

安装 Filebeat 的过程和安装 ES & Kibana 的过程是一致的,如果安装 Filebeat 的机器之前没有导入 GDP Key & 创建 Repo; 请参照上面的操作。 好了, 现在安装它

# yum -y install filebeat

修改配置文件

# grep -v "^.*#\|^$" /etc/filebeat/filebeat.yml 
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/*.log
- input_type: log
  paths:
    - /var/log/cron
  fields:
    log_source: Cron
    appName: System_cron
- input_type: log
  paths:
    - /var/log/httpd/access_log
  document_type: apache
  fields:
    log_source: apache
    appName: access_log
output.elasticsearch:
hosts: ["172.16.9.50:9200"]

设置开机自启

# systemctl enable filebeat
Created symlink from /etc/systemd/system/multi-user.target.wants/filebeat.service to /usr/lib/systemd/system/filebeat.service.
# systemctl start filebeat

默认数据 已经配置到  /etc/filebeat/filebeat.yml

- input_type: log

# Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/*.log

现在我们可以通过 Kibana Dashboard 创建 Index Patterns 啦。

http://172.16.9.50:5601/app/kibana#/management

kibana_index_patterns 现在我们可以到 Discover 菜单查看数据了 kibana_discover_1

Parsing data using Logstash

要充分利用日志中的数据,您需要一个可以解析它们的工具,而 Logstash 就是这样一个工具。 从5.0开始,您可以使用Elasticsearch “ingest node” 进行一些这样的处理,这样可以明显提高性能。 然而,ingest pipelines 不能提供 Logstash 的灵活性(例如条件),因此我们将在此文中专注于Logstash。 要构建您的ELK Workstream: Filebeat - > Logstash - > Elasticsearch - > Kibana,您需要安装和配置Logstash,然后更新 Filebeat 配置以指向 Logstash 而不是 Elasticsearch。 首先使用同样的 repository 安装 logstash

# yum install -y logstash

在  /etc/logstash/conf.d/ 创建  input/output/filter 文件 ,  在  beats input 指定一个端口 用于 Filebeat 连接. 接下来, 您可以使用 grok 过滤器解析您的数据,然后将其推送到Elasticsearch:

cat > /etc/logstash/conf.d/02-beats-input.conf << EOF

input {
    beats {
        port => 5044
        # ssl => false
        # ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
        # ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
    }
}

EOF


cat > /etc/logstash/conf.d/30-elasticsearch-output.conf << EOF

output {
    elasticsearch {
        hosts => ["172.16.9.50:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        flush_size => 6000
        idle_flush_time => 6
        sniffing => true
        template_overwrite => true
    }
}

EOF


cat > /etc/logstash/conf.d/10-apache-filter.conf << EOF

filter {
    grok {
        match => { "message" => "%{COMMONAPACHELOG}" }
    }
}

EOF

验证配置文件是否有误

# /usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/* --path.settings /etc/logstash/
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK

注:
 --path.settings SETTINGS_DIR Directory containing logstash.yml file. This can also be
 set through the LS_SETTINGS_DIR environment variable.
 (default: "/usr/share/logstash/config")

 -t, --config.test_and_exit Check configuration for valid syntax and then exit.
 (default: false)

 -f, --path.config CONFIG_PATH Load the logstash config from a specific file
 or directory. If a directory is given, all
 files in that directory will be concatenated
 in lexicographical order and then parsed as a
 single config file. You can also specify
 wildcards (globs) and any matched files will
 be loaded in the order described above.

将 Filebeat 的数据流指向 Logstash

# diff -ruN  /etc/filebeat/filebeat.yml{.old,}
--- /etc/filebeat/filebeat.yml.old	2017-04-18 14:26:51.906149664 +0800
+++ /etc/filebeat/filebeat.yml	2017-04-18 14:27:30.170147614 +0800
@@ -84,10 +84,10 @@
 # Multiple outputs may be used.
 
 #-------------------------- Elasticsearch output ------------------------------
-output.elasticsearch:
+# output.elasticsearch:
   # Array of hosts to connect to.
   # hosts: ["localhost:9200"]
-  hosts: ["172.16.9.50:9200"]
+  # hosts: ["172.16.9.50:9200"]
 
   # Optional protocol and basic auth credentials.
   #protocol: "https"
@@ -95,9 +95,10 @@
   #password: "changeme"
 
 #----------------------------- Logstash output --------------------------------
-#output.logstash:
+output.logstash:
   # The Logstash hosts
   #hosts: ["localhost:5044"]
+  hosts: ["172.16.9.50:5044"]
 
   # Optional SSL. By default is off.
   # List of root certificates for HTTPS server verifications

为了触发 Filebeat 通过 logstash 重新发送日志,您需要完成以下操作:

  • 关闭它 (service filebeat stop)
  • 删除 registry file,其中 Filebeat 会记住它离开日志的位置. 这将使Filebeat重新开始:( rm -f /var/lib/filebeat/registry)
  • 删除已经存储到 Elasticsearch 的数据: curl -XDELETE localhost:9200/filebeat*
  • Start Logstash and Filebeat: sudo service logstash start; sudo service filebeat start
  • 删除注册表文件,其中Filebeat会记住它离开Apache日志的位置。 这将使Filebeat重新开始:sudo rm / var / lib / filebeat / registry 删除已经编入Elasticsearch的数据:curl -XDELETE localhost:9200 / filebeat * 启动 Logstash 和 Filebeat: service logstash start; service filebeat start

现在,您的日志应该在 Elasticsearch 中重新写入索引,现在只有这些日志已被构造,默认情况下,将转到logstash- *索引。 Logstash 使用类似于 Filebeat 的模板管理自己的索引,所以你现在不必担心设置。 回到Kibana,您需要通过在“Management ”选项卡下添加新的索引模式来指向 logstash- *索引。 之后再Discover 菜单中查看 kibana_apache_logstash 由于时间关系文章难免有纰漏,欢迎指出。 获取更多更详细的内容,请移步 elastic 官网。

Reference

[0] https://www.elastic.co

[1] https://www.elastic.co/guide/en/beats/filebeat/5.3/filebeat-overview.html

[2] https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html

[3] https://www.oreilly.com/learning/a-guide-to-elasticsearch-5-and-the-elkelastic-stack

[4] https://my.oschina.net/HeAlvin/blog/828639