License: Attribution-NonCommercial-ShareAlike 4.0 International
本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。
前言
本文主要讲述的是 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
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
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 菜单中查看 由于时间关系文章难免有纰漏,欢迎指出。 获取更多更详细的内容,请移步 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