Elastic Beats 是你作为代理安装在服务器上的开源数据摄入器,用于将运营数据发送到Elasticsearch。 Elastic提供Beats来捕获:
Audit data | |
Log files | |
Cloud data | |
Availability | |
Systemd journals | |
Metrics | |
Network traffic | |
Windows event logs |
Beats可以将数据直接发送到Elasticsearch或通过Logstash发送,你可以在此处进一步处理和增强数据,然后再在Kibana中进行可视化。
在今天的文章中,我们将讲述在使用Beats时,我们需要注意的问题。希望对大家会有所帮助。
RBAC:给用户适当的权限
我们在之前的文章中,毫无例外地,我们使用了超级用户账号elastic。在实际的使用中,我们并不建议这么做。通常,我们会创建一个适合自己用途的账号,并赋予这个账号相应的权限。如果你还不知道如何创建一个账号的话,请参阅我之前的文章 “Elasticsearch:用户安全设置”。更多关于Beats权限的内容请参阅Elastic的官方文档链接https://www.elastic.co/guide/en/beats/libbeat/current/beats-reference.html。
在这里,我们假设创建一个叫做beats-role的role。
点击Create Role 按钮:
在这里,我们创建一个叫做beats-setup的role。这个针对我们在运行beats时使用诸如:
./filebeat setup
我们chuang针对filebeat它和其它的beats的权限有所不同,它需要读取机器学习的jobs,所以它需要read权限。在这里manage指的是可以创建新的索引。
我们接着创建beats-writer role。这个role是可以帮我们把数据写入到Elasticsearch中的权限。我们需要管理ingest pipeline来处理数据。
我们可以接着来创建根据我们需要的users: beats-setup及beats-writer。它们分别对应于我们不同的需求来创建的,并赋予它们不同的权限。
这样我们创建的用户及权限就是这样的:
在我们使用Filebeat来收集数据时,我们可以这样来配置我们的Filebeat。我们修个filebeat.yml文件:
最终,在我们的Kibana中,我们可以看到:
在上面,我们可以在Dashboard中看到很多的Filebeat的Dashboard,说明我们的setup是起作用的。
不要在文本中使用密码
细心的开发者可能已经看到了:在我上面的例子中,我在filebeat.yml文件中使用了一个密码。这个密码很容易被别人看到。这在实际的使用中,并不是建议的。我们建议使用beats中的key store来存储这些我们敏感的信息。关于keystore的详细信息,我们可以参阅Elastic的官方文档https://www.elastic.co/guide/en/beats/filebeat/current/keystore.html。
比如,我们可以这么做。在terminal中打入如下的命令:
./filebeat keystore create
$ ./filebeat keystore create
Created filebeat keystore
接着我们使用如下的命令来创建一些key/value:
./filebeat keystore add ES_HOST
$ ./filebeat keystore add ES_HOST
Enter value for ES_HOST:
Successfully updated the keystore
我们把localhost:9200的内容copy paste,然后回车。这样,我们就建立了一个叫做ES_HOST的key,并且它的值是localhost:9200。按照同样的方法,我们可以创建用户名及密码:
./filebeat keystore add ES_USER
Enter value for ES_USER:
Successfully updated the keystore
我们把beats-setup拷入,并粘贴过来。
$ ./filebeat keystore add ES_PWD
Enter value for ES_PWD:
Successfully updated the keystore
我们也同样创建了一个叫做ES_PWD的key,它用来存储我们的密码。那么我们如何使用这些key呢?我们打开filebeat.yml文件:
通过这样的改造后,任何人拿到你的这个filebeat.yml文件,都不会知道你的用户名及密码。我们也可以使用如下的方法执行:
./filebeat -e -E output.elasticsearch.username=\${ES_USER} -E output.elasticsearch.password=\${ES_PWD} -E output.elasticsearch.hosts=\${ES_HOST}
我们也可以对其它的beats做同样的这种操作。上面只是针对filebeat做一个的展示。
对摄入节点做负载均衡
当数据摄入到Elasticsearch中时,我们可以把所有的ingest node的地址放入到hosts中,这样可以做到负载均衡。通常Round Robin 的算法会被自动应用到。
比如针对上面的配置,我们把ingest node的地址10.45.3.2.9200和10.45.3.1:9200的地址都放入到beats配置的hosts里,那么在导入数据时,每个节点会被依次轮询使用以达到负载均衡。更多阅读,请参阅https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html
Elastic Common Schema 及关联
Elastic ECS为我们所有人提供了一个标准的但可扩展的shecma。 标准化数据,从长查询到小查询; 简化并加快可视化,搜索,报告。
使用Elastic ECS 标准化数据:
它为摄取到Elasticsearch中的数据定义了一组通用的文档字段。
添加字段到你的工作流程
添加一些和自己业务相关的字段到beats里,比如添加ECS已经有定义的service.name及service.id:
processors:
- add_fields:
target: ''
fields:
service.name: 'Online Banking'
service.id: 'ob-canada'
在上面,我们添加service.name及service.id来表示自己的业务。我们在Kibana中可以通过这两个字段来进行过滤文档。
假脱机到磁盘以提高弹性
文件假脱机(spool queue)队列将所有事件存储在磁盘环形缓冲区中。 假脱机具有写入缓冲区,新事件将写入该缓冲区。 仅在成功清空写缓冲区后,写入假脱机的事件才会转发到输出。
后台打印程序等待输出确认或丢弃事件。 如果假脱机已满,则不能插入新事件。 阀芯将阻塞。 仅在收到来自输出的信号后,才释放空间。
在磁盘上,后台打印程序将文件分成页面。 file.page_size设置配置文件创建时文件的页面大小。 最佳页面大小取决于基础文件系统使用的有效块大小。
此样本配置使假脱机具有所有默认设置(有关默认设置,请参见配置选项)和默认文件路径:
queue.spool: ~
此示例配置创建一个具有16KiB页的512MiB假脱机。 如果已写入10MiB的内容或1024个事件,则刷新写缓冲区。 如果最早的可用事件一直在写缓冲区中等待5秒,则该缓冲区也将被刷新:
queue.spool:
file:
path: "${path.data}/spool.dat"
size: 512MiB
page_size: 16KiB
write:
buffer_size: 10MiB
flush.timeout: 5s
flush.events: 1024
详细细节请在https://www.elastic.co/guide/en/beats/filebeat/current/configuring-internal-queue.html找到。
监督你的集群及ingest节点
请参阅我之前的文章“通过Metricbeat实现外部对Elastic Stack的监控”。
让系统管理你的索引
我们可以使用Index Life Cycle Management来管理我们的索引。这个功能在7.0以后已经被引入。详细阅读请参阅文章“Elasticsearch:Index生命周期管理入门”。
调整Beat log等级
filebeat.yml配置文件的logging部分包含用于配置日志输出的选项。 日志记录系统可以将日志写入syslog或轮换日志文件。 如果未明确配置日志记录,则使用文件输出。详细阅读请参阅链接https://www.elastic.co/guide/en/beats/filebeat/current/configuration-logging.html
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
你可以把上面的logging.level改为error,这样你可以记录错误发生时的log信息。
启动集成
我们可以在beats的配置文件添加更多的关于beats的metadata信息:
processors:
- add_host_metadata:
netinfo.enabled: true
cache.ttl: 5m
geo:
name: nyc-dc1-rack1
location: 40.7128, -74.0060
continent_name: North America
country_iso_code: US
region_name: New York
region_iso_code: NY
city_name: New York
比如在上面,我们通过processors添加关于host的更多metadata信息。更多信息请参阅https://www.elastic.co/guide/en/beats/filebeat/current/add-host-metadata.html
从多个位置进行监控
使用Heartbeat的ElasticUptime包含地理数据,因此您可以从客户所在的位置跟踪性能。 使用add_observer_metadata处理器。详细阅读请参阅https://www.elastic.co/guide/en/beats/filebeat/current/add-observer-metadata.html
processors:
- add_observer_metadata:
netinfo.enabled: false
cache.ttl: 5m
geo:
name: nyc-dc1-rack1
location: 40.7128, -74.0060
continent_name: North America
country_iso_code: US
region_name: New York
region_iso_code: NY
city_name: New York
数据加密(TLS)
请参阅我之前的文章“为Elasticsearch启动https访问”。