赞
踩
这篇文章是 “Beats 入门教程 (一)”的续篇。在上一篇文章,我们主要讲述了 Beats 的一些理论方面的知识。在这篇文章中,我们将具体展示如何使用 Filebeat 及 Metriceat 把数据导入到我们的 Elasticsearch 并对他们进行分析。
有关 Beats 如何连接到带有 HTTPS 的 Elasticsearch 集群,请参考我的另外一篇文章 “Beats 如何连接带有 HTTPS 访问的集群”。
对于我们的测试环境,我们可以有几种选择:
在今天的练习中,我将主要以本机的 Elastic Stack 及 Elastic cloud 来讲述。针对其它的环境,基本都是一样的。
在接下来的展示中,我将展示如何使用 Filebeat 来收集系统日志,并把日志传入到 Elasticsearch:
我们打开我们的自己的 Kibana,并按照如下的步骤来进行安装:
由于 Filebeat 是 log 相关的,所以我们需要选择 “Add log data”。我们想对系统(System)日志进行监控,所以,我们选择 “System logs”:
然后,我们根据我们自己运行的平台,我们分别使用不同的命令来在我们的平台上进行安装:
在上面我们可以看到最详细的安装指令。根据我的情况,我在 macOS 上部署我的 Filebeat。具体的安装步骤如下:
我们执行如下的指令来安装 Filebeat:
- curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-darwin-x86_64.tar.gz
- tar xzvf filebeat-7.5.0-darwin-x86_64.tar.gz
- cd filebeat-7.5.0-darwin-x86_64/
我们在 Filebeat 的安装目录下,可以发现一个叫做 filebeat.yml 的文件。这个文件就是 filebeat 的配置文件:
- $ pwd
- /Users/liuxg/elastic8/filebeat-7.5.0-darwin-x86_64
- liuxg-2:filebeat-7.5.0-darwin-x86_64 liuxg$ ls
- LICENSE.txt fields.yml kibana
- NOTICE.txt filebeat logs
- README.md filebeat.reference.yml module
- data filebeat.yml modules.d
我们用我们所喜爱的编辑打开 filebeat.yml 文件,并找到如下的部分:
- output.elasticsearch:
- hosts: ["<es_url>"]
- username: "elastic"
- password: "<password>"
- setup.kibana:
- host: "<kibana_url>"
在上面,我们需要把我们的 Elasticsearch 及 Kibana 的 host 地址填上。针对我本地的情况,我填入 localhost:9200 和 localhost:5601。如果是针对本地安装的 Elastic Stack 来说,这些都是默认的配置,我们甚至不需要做任何的修改。如果我们对我们的 Elasticsearch 已经设置用户名及密码的话,那么请填入你自己的用户名及密码。
如下的配置只限于 Elastic Cloud。针对 Elastic cloud,我们可以避免把我们的用户名及密码写到我们的 filebeat.yml 文件中,我们可以使用 cloud.id 来及 keystore 管理来帮我们实现。
我们首先在 Terminal 中打入如下的命令:
./filebeat keystore create
接着打入如下的命令:
./filebeat keystore add CLOUD_PWD
在这一步我们拷贝在Cloud中所创建的密码,并粘贴下来。
最后,我们修改我们的 filebeat.yml 文件
根据上面的提示,一旦我们设置好 cloud.id,它将覆盖我们的 output.elasticsearch 中的设置。
我们可以可以使用同样的方法来创建如下的 key:
./filebeat keystore add CLOUD_ID
通过上面的配置,我们可以在 filebeat.yml 的文件中使用同样的方法来代替我们的 cloud.id。
另外,我们可以在不用修改 filebeat.yml 的情况下直接使用命令行参数的方法来进行操作,比如在 setup filebeat 时:
./filebeat setup -E cloud.id=\${CLOID_ID} -E cloud.auth=elastic:\${CLOUD_PWD}
请注意上面\字符,它是一个转字符,因为后面的 $ 符号有特别的意义。
我们可以通过如下的命令来展示所有 Filebeat 的模块:
./filebeat modules list
在上面,我们可以看到 redis 模块已经被成功地启动了。如果我们想启动 system 模块,我们可以使用如下的命令:
./filebeat modules enable system
上面的命令的返回结果是:
Enabled system
如果我们想不启动 redis 模块,我们可以使用如下的命令:
./filebeat modules disable redis
上面的命令的返回结果是:
Disabled redis
我们可以使用如下的命令再次查询我们启动的模块:
在上面,我们可以清楚地看到 redis 模块已经被成功地关闭了,取而代之的是 system 模块被成功地启动了。我们可以在 filebeat 的安装目录下的 modules.d 子目录下可以查看到 system 模块的配置文件:
从上面我们可以清楚地看出来 system.yml 文件已经被成功地启动了。我们可以用我们所喜爱的编辑器来修改这个文件的配置。比如,我们如果已经通过如下的命令启动 nginx 模块:
./filebeat modules enable nginx
那么我们可以通过编辑器来修改这个在 modules.d 下的 nginx.yml 文件:
- # Module: nginx
- # Docs: https://www.elastic.co/guide/en/beats/filebeat/7.10/filebeat-module-nginx.html
-
- - module: nginx
- # Access logs
- access:
- enabled: true
-
- # Set custom paths for the log files. If left empty,
- # Filebeat will choose the paths depending on your OS.
- #var.paths:
-
- # Error logs
- error:
- enabled: true
-
- # Set custom paths for the log files. If left empty,
- # Filebeat will choose the paths depending on your OS.
- #var.paths:
-
- # Ingress-nginx controller logs. This is disabled by default. It could be used in Kubernetes environments to parse ingress-nginx logs
- ingress_controller:
- enabled: false
-
- # Set custom paths for the log files. If left empty,
- # Filebeat will choose the paths depending on your OS.
- #var.paths:
比如,我们可以针对它做如下的配置:
modules.d/nginx.yml
- - module: nginx
- access:
- enabled: true
- var.paths: ["/path/to/log/nginx/access.log*"]
- error:
- enabled: true
- var.paths: ["/path/to/log/nginx/error.log*"]
在上面我们可以对这个模块进行配置。比如,我可以配置 access.log 或者 error.log 的位置。当然,我们也可以直接在运行 filebeat 时,直接在命令行中定义这些参数:
- ./filebeat --modules nginx \
- -M "nginx.access.var.paths=[/path/to/log/nginx/access.log*]" \
- -M "nginx.error.var.paths=[/path/to/log/nginx/error.log*]"
每个模块启动一个 Filebeat 的输入(input),并且每个输入启动一个或者多个 harvester。你可以添加或者覆盖任何默认的输入设置,比如,你可以使用如下的配置来关掉一个输入文件,只要文件的末尾已经达到。这个设置针对一些文件只写一次,并且不会有更新的情况非常有用:
- - module: nginx
- access:
- input:
- close_eof: true
如果我们需要修改 filebeat.yml 这个配置文件,或者下面的 module 的配置文件,我们可以通过如下的命令来检查配置文件的正确如否:
./filebeat test config
- $ ./filebeat test config
- Config OK
./filebeat test output
- $ ./filebeat test output
- elasticsearch: http://192.168.0.3:9200...
- parse url... OK
- connection...
- parse host... OK
- dns lookup... OK
- addresses: 192.168.0.3
- dial up... OK
- TLS... WARN secure connection disabled
- talk to server... OK
- version: 7.7.0
针对 Filebeat,它没有相应的命令来对模块进行测试。这一点和下面的 Metricbeat 是不同的。
我们甚至可以在运行 filebeat 的同时来启动相应的模块:
./filebeat --modules nginx, system, mysql
我们也可以直接在 modules.d 目录下把相应的文件名的 .disabled 去掉,从而使得该文件名是以 .yml 为结束的文件。通过这样的方法。我们也可以启动该模块。
还有一种方法就是在 filebeat.yml 文件中,我们直接添加相应启动的模块:
- filebeat.modules:
- - module: nginx
- - module: system
- - module: mysql
比如在 filebeat 启动 elasticsearch 模块的情况下,我们可以正对它做如下的配置:
modules.d/elasticsearch.yml
- filebeat.modules:
- - module: elasticsearch
- server:
- var.paths:
- - ../elasticsearch*/logs/*_server.json
- slowlog:
- var.paths:
- - ../elasticsearch*/logs/*_index_search_slowlog.json
- - ../elasticsearch*/logs/*_index_indexing_slowlog.json
- gc:
- var.paths:
- - ../elasticsearch*/logs/gc/log.[0-9]*
- - ../elasticsearch*/logs/gc.log
- audit:
- var.paths:
- - ../elasticsearch*/logs/*_audit.json
上面是我们在启动对 Elasticsearch 的监控情况下,针对 elasticsearch 模块进行配置的示例。如果你想了解更多关于对 Elasitcsearch 的监控,请阅读文章 “Elastic:监控 Elasticsearch 及 Kibana”。
在上面,我们已经成功地配置了 filebeat,在接下来的步骤中,我们来启动 Filebeat:
./filebeat setup
setup 命令将加载 Kibana 仪表板。如果你想了解更多关于 setup 命令的秘密,请阅读我的另外一篇文章 “Beats:解密 Filebeat 中的 setup 命令”。
在上面,我们使用 setup 来加载仪表板等,另外一种方式是,我们直接修该 filebeat.yml 文件中的如下部分:
这样,当我们在下面的命令启动 Filebeat 时,它会自动帮我们完成上面的 ./filebeat setup 所完成的工作。
如果已经设置了仪表板,请忽略此命令。上面命令的输出结果为:
- ./filebeat setup
- Index setup finished.
- Loading dashboards (Kibana must be running and reachable)
- Loaded dashboards
- Loaded machine learning job configurations
- Loaded Ingest pipelines
在上面,我们可以看出来在 setup 这一步它帮我们配置好 dashboard,装载机器学习及 ingest pipleline。
我们接下来运行如下的命令来把我们的 sysetm 模块的数据送入到 Elasticsearch 之中:
./filebeat -e
我们点击 “Check data” 按钮:
在 Kibana 中,我们可以看到已经收到数据。
Beats 收集起来的数据被存放于由配置文件中 output.elasticsearch.index 所定义。在默认的情况下,它的值是这样的:{beat}-%{[agent.version]}-%{+yyyy.MM.dd},比如,针对 Filebeat,在默认的情况下,我们会看到诸如 filebeat-7.13.0-2021-06-18 这样的索引名称。
由于在上面的 filebeat setup 这一步已经为我们创建好了一个叫做 filebeat-* 的 index pattern,我们可以直接打开 Kibana 中的 Discover:
在右上角选好我们喜欢的时间区域,然后对我们的数据进行查询:
我们接着点击 Dashboard:
我们选择 “[Filebeat System] Syslog dashboard ECS”:
在上面它展示了我的电脑里的 Syslog 的所有 log 信息。我们也可以在上面选择 “Sudo commands”,“SSH logins” 及 “New users and groups” 分别进行查看。
从上面的展示我们可以查看来:Elastic 公司除了提供一个强大的数据搜索引擎之外,也在 Elastic Stack 中提出了开箱即用的工具。我们只需要简单的几部配置,就可以很方便地把我们所需要的日志数据导入到 Elasticsearch 中进行分析。
Metricbeat 的使用和 Filebea t的使用非常地相似。我们打开我们的自己的 Kibana,并按照如下的步骤来进行安装:
由于 Metricbeat 是属于 Metrics 范畴,所以我们选择 “Add metric data”:
同样地,针对我们的 metrics,我们也想对 sysem 模块来做指标分析:
根据不同的平台,我们选择不同的方法进行安装。针对我的情况,我在我们的 MacOS 上进行安装。简单地说:
我们首先安装如下的指令来下载并安装 metribeat:
- curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.5.0-darwin-x86_64.tar.gz
- tar xzvf metricbeat-7.5.0-darwin-x86_64.tar.gz
- cd metricbeat-7.5.0-darwin-x86_64/
我们首先进入到 Metricbeat 的安装目录,我们可看到如下的文件:
- pwd
- /Users/liuxg/elastic8/metricbeat-7.5.0-darwin-x86_64
- liuxg-2:metricbeat-7.5.0-darwin-x86_64 liuxg$ ls
- LICENSE.txt fields.yml metricbeat.reference.yml
- NOTICE.txt kibana metricbeat.yml
- README.md logs module
- data metricbeat modules.d
在安装目录的根目录下, 我们可以发现一个叫做 metribeat.yml 的文件。这个文件就是 metricbeat 的配置文件。我们用我们喜爱的编辑器,并打开这个文件。找到如下的部分:
- output.elasticsearch:
- hosts: ["<es_url>"]
- username: "elastic"
- password: "<password>"
- setup.kibana:
- host: "<kibana_url>"
在上面,我们需要把我们的 Elasticsearch 及 Kibana 的 host 地址填上。针对我本地的情况,我填入 localhost:9200 和localhost:5601。如果是针对本地安装的 Elastic Stack 来说,这些都是默认的配置,我们甚至不需要做任何的修改。如果我们对我们的 Elasticsearch 已经设置用户名及密码的话,那么请填入你自己的用户名及密码。
如下的配置只限于 Elastic Cloud。针对 Elastic cloud,我们可以避免把我们的用户名及密码写到我们的 metricbeat.yml 文件中,我们可以使用 cloud.id 来及 keystore 管理来帮我们实现。
我们首先在 Terminal 中打入如下的命令:
./metricbeat keystore create
接着打入如下的命令:
./metricbeat keystore add CLOUD_PWD
在这一步我们拷贝在 Cloud 中所创建的密码,并粘贴下来。
然后修改我们的 metricbeat.yml:
根据上面的提示,一旦我们设置好 cloud.id,它将覆盖我们的 output.elasticsearch 中的设置。
我们可以通过如下的命令来展示所有 Metricbeat 的模块:
在上面我们可以看出来 redis 模板已经被启动,其它的模块都被禁止。
在默认的情况下,system 模块就被启动了。如果我们想启动 system 模块,我们可以使用如下的命令:
./metricbeat modules enable system
上面命令的返回结果是:
Enabled system
如果我们想禁止 redis 模块,我们可以使用如下的命令:
./metricbeat modules disable redis
上面命令的返回结果是:
Disabled redis
我们可以使用如下的命令再次查询我们启动的模块:
我们可以看出来我们的 redis 模块已经从 Enabled 里移除了,取而代之的是 system 模块。
我们可以在 metricbeat 的安装目录下的 modules.d 子目录下可以查看到 system 模块的配置文件:
我们可以在 system.yml 中找到 system 模块的配置文件。
我们可以通过如下的命令来测试 metricbeat.yml 的配置是否成功:
./metricbeat test config
如果正确的话,会显示:
- $ ./metricbeat test config
- Config OK
我们也可以来测试某个模块:
./metricbeat test modules system
它将显示:
- $ ./metricbeat test modules system
- system...
- cpu...OK
- result:
- {
- "@timestamp": "2020-07-03T10:48:52.063Z",
- "event": {
- "dataset": "system.cpu",
- "duration": 19621,
- "module": "system"
- },
- "metricset": {
- "name": "cpu",
- "period": 10000
- },
- "service": {
- "type": "system"
- },
- ...
如果这个显示太多了。我们可以使用如下的命令来进行显示:
./metricbeat test modules system | grep OK
上面的命令显示的结果为:
- $ ./metricbeat test modules system | grep OK
- cpu...OK
- load...OK
- memory...OK
- network...OK
- process...OK
- "OK"
- "command_line": "grep OK",
- "cmdline": "grep OK",
- process_summary...OK
- socket_summary...OK
- OK
- OK
- uptime...OK
你也可显示这个模块中的某个 metricset,比如,我们可以在 ./modules.d/system.yml 中可以看到如下的一些 metricsets:
我们可以对上面的 ./modules.d/system.yml 文件进行修改,比如采样的频率以及对各个 metricsets 进行启动或禁止。我们可以通过如下的命令来进行测试:
./metricbeat test modules system cpu
我们也可以来测试它的 output:
./metricbeat test output
- $ ./metricbeat test output
- elasticsearch: http://localhost:9200...
- parse url... OK
- connection...
- parse host... OK
- dns lookup... OK
- addresses: ::1, 127.0.0.1
- dial up... OK
- TLS... WARN secure connection disabled
- talk to server... OK
- version: 7.8.0
关于配置 Metricbeat,我们有两个地方可以进行配置:
在默认的情况下,我们针对 metricbeat.yml 所做的任何改变在 metricbeat 运行的情况下都不会立即起作用,除非我们重新启动 metricbeat。为了能够使得 metricbeat 能够对我们的动态修改起作用,我们可以对 reload.enabled 及 reload.period 进行配置,比如:
- metricbeat.config.modules:
- # Glob pattern for configuration loading
- path: ${path.config}/modules.d/*.yml
- reload.enabled: true
- reload.period: 10s
通过上面的配置,metricbeat 将会在每隔10秒钟来检查配置文件的改变。如果配置以及修改,那么将会采用新的配置。
在上面,我们已经成功地配置了 metricbeat,在接下来的步骤中,我们来启动 Metricbeat:
./metricbeat setup
setup 命令将加载 Kibana仪表板。 如果已经设置了仪表板,请忽略此命令。上面命令的输出结果为:
- ./metricbeat setup
- Index setup finished.
- Loading dashboards (Kibana must be running and reachable)
- Loaded dashboards
我们接下来运行如下的命令来把我们的 sysetm 模块的数据送入到 Elasticsearch 之中:
./metricbeat -e
这个时候,我们在 Kibana 中点击 “Check data” 按钮:
我们可以看到数据已经被 Elasticsearch 成功收到了。
在 Kibana 中,我们点击 Dashboard 应用:
我们来点击 “[Metricbeat System] Overview ECS”:
我们可以看到我们的电脑的 system 指标信息。我们也可以点击上面的 “Host Overview” 及 “Container overview”。我们点击上面所示的 liu-2.local host,我们可以看到关于这个 host 的所有的 system 信息:
下面的就留给你们自己探索了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。