构建在开源基础之上,Elastic Stack 让您能够安全可靠地获取任何来源、任何格式的数据,并且实时地对数据进行搜索、分析和可视化。
官方网站:https://www.elastic.co/cn/products/
Beats
Beats 是一个面向轻量型采集器的平台,这些采集器可从边缘机器向 Logstash 和 Elasticsearch 发送数据。
Filebeat - 日志文件
当您要面对成百上千、甚至成千上万的服务器、虚拟机和容器生成的日志时,请告别 SSH 吧。Filebeat 将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。
架构
1、汇总、“tail -f” 和搜索
启动 Filebeat 后,打开 Logs UI,直接在 Kibana 中观看对您的文件进行 tail 操作的过程。通过搜索栏按照服务、应用程序、主机、数据中心或者其他条件进行筛选,以跟踪您的全部汇总日志中的异常行为。
2、性能稳健,不错过任何检测信号
无论在任何环境中,随时都潜伏着应用程序中断的风险。Filebeat 能够读取并转发日志行,如果出现中断,还会在一切恢复正常后,从中断前停止的位置继续开始。
3、Filebeat 让简单的事情简单化
Filebeat 内置有多种模块(auditd、Apache、NGINX、System、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点,是因为它将自动默认路径(因操作系统而异)与 Elasticsearch 采集节点管道的定义和 Kibana 仪表板组合在一起。不仅如此,数个 Filebeat 模块还包括预配置的 Machine Learning 任务。
4、容器就绪和云端就绪
通过 Elastic Stack,可以轻松地监测容器和云服务。在 Kubernetes、Docker 或云端部署中部署 Filebeat,即可获得所有的日志流:信息十分完整,包括日志流的 pod、容器、节点、VM、主机以及自动关联时用到的其他元数据。此外,Beats Autodiscover 功能可检测到新容器,并使用恰当的 Filebeat 模块对这些容器进行自适应监测。
5、它不会导致您的管道过载
当将数据发送到 Logstash 或 Elasticsearch 时,Filebeat 使用背压敏感协议,以应对更多的数据量。如果 Logstash 正在忙于处理数据,则会告诉 Filebeat 减慢读取速度。一旦拥堵得到解决,Filebeat 就会恢复到原来的步伐并继续传输数据。
6、输送至 Elasticsearch 或 Logstash,在 Kibana 中实现可视化
Filebeat 是 Elastic Stack 的一部分,因此能够与 Logstash、Elasticsearch 和 Kibana 无缝协作。无论您要使用 Logstash 转换或充实日志和文件,还是在 Elasticsearch 中随意处理一些数据分析,亦或在 Kibana 中构建和分享仪表板,Filebeat 都能轻松地将您的数据发送至最关键的地方。
部署
mkdir /es/beats
tar -xvf filebeat-6.5.4-linux-x86_64.tar.gz
cd filebeat-6.5.4-linux-x86_64
运行
Filebeat目前支持两种prospector类型:log和stdin。
./filebeat -e -c stdbeat.yml -d "publish" # 运行,并指定配置文件
#参数说明
-e: 输出到标准输出,默认输出到syslog和logs下
-c: 指定配置文件
-d: 输出debug信息,一般生产环境不需要
示例一:实时读取控制台最新输入信息,并进行控制台最新输出
#创建如下配置文件 stdbeat.yml
filebeat.inputs:
- type: stdin # 控制台输入
enabled: true
output.console: # 控制台输出
pretty: true
enable: true
#启动filebeat
./filebeat -e -c stdbeat.yml # 运行,并指定配置文件
#输入hello运行结果如下:
hello
方式二:实时监测指定日志文件内容(行内容),并进行控制台实时输出
#创建如下配置文件 logbeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /es/beats/logs/*.log
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c logbeat.yml
#/es/beats/logs下创建a.log文件,并输入如下内容
hello
world
方式三:为输出添加自定义标签和字段,以便后期处理
#创建如下配置文件 logbeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /es/beats/logs/*.log
tags: ["web"] #添加自定义tag,便于后续的处理
fields: #添加自定义字段
key: value
fields_under_root: true #true为自定义字段在根节点否则在子节点中
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c logbeat.yml
#/es/beats/logs下创建a.log文件,并输入如下内容
hello
world
方式三:实时监测指定日志文件内容(行内容),并实时输出到ES
#创建如下配置文件 logbeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /es/beats/logs/*.log
tags: ["web"] #添加自定义tag,便于后续的处理
fields: #添加自定义字段
key: value
fields_under_root: true #true为自定义字段在根节点否则在子节点中
setup.template.settings:
index.number_of_shards: 3 #指定索引的分区数
output.elasticsearch: #指定ES的配置
hosts: ["192.168.1.100:9200","192.168.1.100:9201","192.168.1.100:9202"]
#启动filebeat
./filebeat -e -c logbeat.yml
#/es/beats/logs下创建a.log文件,并输入如下内容
hello
world
ES查看数据:
模块
前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我 们的配置,直接就可以使用。
官方网站:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html
示例一:Redis
实时获取Redis运行输出的日志数据到ES中。
1、启动和禁用
./filebeat modules enable redis #启动
./filebeat modules disable redis #禁用
2、修改redis.yml配置文件
cd modules.d/
vim redis.yml
- module: redis
# Main logs
log:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/data/redis-data/node01/*.log","/data/redis-data/node02/*.log","/data/redis-data/node03/*.log"] # reids日志文件位置
#Slow logs, retrieved via the Redis API (SLOWLOG)
slowlog:
enabled: false
# The Redis hosts to connect to.
# var.hosts: ["localhost:6379"]
# Optional, the password to use when connecting to Redis.
# var.password:
3、 编写配置文件redisbeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /es/log/*.log
# output.console: # 输出到控制台
# pretty: true
# enable: true
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml # 读取之前修改的reids.yml文件
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
output.elasticsearch: # 指定ES的配置
hosts: ["192.168.1.100:9200","192.168.1.100:9201","192.168.1.100:9202"]
4、启动
./filebeat -e -c redisbeat.yml
5、启动redis服务示例
docker create --name redis-node01 -v /data/redis-data/node01:/data -p 6379:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --loglevel debug --logfile nodes-node-01.log
docker create --name redis-node02 -v /data/redis-data/node02:/data -p 6380:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --loglevel debug --logfile nodes-node-02.log
docker create --name redis-node03 -v /data/redis-data/node03:/data -p 6381:6379 redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --loglevel debug --logfile nodes-node-03.log
Metricbeat - 指标
轻量型指标采集器:
用于从系统和服务收集指标。Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx,不一而足。
查看官网:https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html
功能
1、系统级监控,更简洁
将 Metricbeat 部署到您的所有 Linux、Windows 和 Mac 主机,并将它连接到 Elasticsearch 就大功告成了:您可以获取系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据,还可针对系统上的每个进程获得与 top 命令类似的统计数据。
2、单个二进制文件提供多种模块
Metricbeat 提供多种内部模块,这些模块可从多项服务(诸如 Apache、Jolokia、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus 等等)中收集指标。安装简单,完全零依赖性。只需在配置文件中启用您所需的模块即可。
3、容器就绪
通过 Elastic Stack,您能够轻松地监测容器。将 Metricbeat 部署到同一台主机上的一个单独容器后,它将收集与主机上运行的其他每一个容器相关的统计数据。在收集统计数据时,它直接从 proc 文件系统读取 cgroup 信息,这就意味着它无需特权即可访问 Docker API,并且同样适用于其他 Runtime。针对 Docker 的 Autodiscovery 让事情进一步简化,您只需指定一个条件即可开启 Metricbeat 模块。
4、不错过任何检测信号
将指标通过假脱机传输方式输送至磁盘,这样您的数据管道再也不会错过任何一个数据点,即使发生中断(例如网络问题),也勿需担心。Metricbeat 会保留传入的数据,并在重新上线后将这些指标输送至 Elasticsearch 或 Logstash。
组成
Metricbeat有2部分组成,一部分是Module,另一部分为Metricset。
Module 收集的对象,如:mysql、redis、操作系统等;
Metricset 收集指标的集合,如:cpu、memory、network等;
部署
tar -xvf metricbeat-6.5.4-linux-x86_64.tar.gz
cd metricbeat-6.5.4-linux-x86_64
运行
1、收集系统指标到ES
vim metricbeat.yml
# 修改配置文件
metricbeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
index.codec: best_compression
setup.kibana:
# 存储到ES
output.elasticsearch:
hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
# 启动,控制台输出信息
./metricbeat -e
模块
查看
./metricbeat modules list
示例一:启动Redis模块–Redis指标数据输出到ES
./metricbeat modules enable redis
#修改redis module配置
vim modules.d/redis.yml
- module: redis
metricsets:
- info
# - keyspace
period: 10s
# Redis hosts
hosts: ["192.168.1.7:6379","192.168.1.7:6380","192.168.1.7:6381"]
# Network type to be used for redis connection. Default: tcp
# network: tcp
# Max number of concurrent connections. Default: 10
# maxconn: 10
# Redis AUTH password. Empty by default.
# password: foobared
# 启动
./metricbeat -e
Kibana
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以 使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对 数据进行多元化的分析和呈现。
官网:https://www.elastic.co/cn/products/kibana
安装
安装方式一:安装包
# 解压安装包
tar -xvf kibana-6.5.4-linux-x86_64.tar.gz
# 修改配置文件
vim config/kibana.yml
server.host: "192.168.1.7"
# 对外暴露服务的地址
elasticsearch.url: "http://192.168.1.7:9200" # 配置Elasticsearch
# 启动
./bin/kibana
# 通过浏览器进行访问
http://192.168.1.7:5601/app/kibana
安装方式二:docker安装
# 拉取镜像
docker pull kibana:6.5.4
# 创建配置文件
vim kibana.yml
server.host: "192.168.1.7"
elasticsearch.url: "http://192.168.1.7:9200"
# 创建容器
docker create --name kibana --net host -v /es/beats/kibanadocker/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:6.5.4
# 启动容器 ,并查看日志
docker start kibana && docker logs -f kibana
简单使用
1、数据探索
探索ES中的数据
并指定了ES(里面是有通过Beats采集的数据),再可视化平台上进行过滤展示。
2、Metricbeat 仪表盘
可以将Metricbeat的数据在Kibana中展示。
内置模板,诸如System、Apache、Jolokia、NGINX、MongoDB、MySQL、PostgreSQL、Prometheus 等等
实现:修改metricbeat的配置文件,如下
vim metricbeat.yml
# 修改配置文件
setup.kibana:
host: "192.168.1.7:5601" # 指定Kibana
# 安装仪表盘到Kibana
./metricbeat setup --dashboards
3、Filebeat 仪表盘
实现:Filebeat Redis模块的配置文件,如下
vim redisbeat.yml
# 修改配置文件
setup.kibana:
host: "192.168.1.7:5601" # 指定Kibana
# 安装仪表盘到Kibana
./filebeat -c redisbeat.yml setup
Logstash
Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与Elasticsearch 产生强大的协同作用。
安装
#检查jdk环境,要求jdk1.8+
java -version
#解压安装包
tar -xvf logstash-6.5.4.tar.gz
#第一个logstash示例 ,控制台输入,做出响应
bin/logstash -e 'input { stdin { } } output { stdout {} }'
示例
一、将Filebeat和Logstash整合起来,读取nginx的日志
数据流:Nginx-----日志文件-------Filebeat------Logstash------ES------Kibana
1、配置Filebeat
#vim d-nginx.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
tags: ["log"]
fields:
from: nginx
fields_under_root: false
# 指定输出为logstash
output.logstash:
hosts: ["192.168.1.7:5044"]
# 启动
./filebeat -e -c d-nginx.yml
# 说明:现在启动会报错,因为Logstash还没有启动
2、配置Logstash
vim d-pipeline.conf
# 输入如下内容:
input {
beats {
port => "5044"
}
}
# The filter part of this file is commented out to indicate that it is
output {
stdout { codec => rubydebug }
}
#启动 --config.test_and_exit 用于测试配置文件是否正确
bin/logstash -f d-pipeline.conf --config.test_and_exit
#正式启动 --config.reload.automatic 热加载配置文件,修改配置文件后无需重新启动
bin/logstash -f d-pipeline.conf --config.reload.automatic
3、启动
分别启动Filebeat和Logstash,刷新页面查看输出
4、日志数据处理
①修改nginx配置文件,指定输出的格式
②编写nginx-patterns文件
NGINX_ACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[% {HTTPDATE:time_local}\] \"%{DATA:request}\" %{INT:status} %{NUMBER:bytes_sent} \"% {DATA:http_referer}\" \"%{DATA:http_user_agent}\"
③修改Logstash d-pipeline.conf文件
input {
beats {
port => "5044"
}
}
filter {
grok {
patterns_dir => "/haoke/logstash-6.5.4/nginx-patterns"
match => { "message" => "%{NGINX_ACCESS}"}
remove_tag => [ "_grokparsefailure" ]
add_tag => [ "nginx_access" ]
}
}
# 控制台输出
# output {
# stdout { codec => rubydebug }
# }
# 输出到ES
output {
elasticsearch {
hosts => [ "192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202" ]
}
}
5、再次启动
分别启动Filebeat和Logstash,刷新页面查看输出(Json格式数据比较清晰)