Beats:最佳实践

Elastic Beats 是你作为代理安装在服务器上的开源数据摄入器,用于将运营数据发送到Elasticsearch。 Elastic提供Beats来捕获:

Audit data

Auditbeat

Log files

Filebeat

Cloud data

Functionbeat

Availability

Heartbeat

Systemd journals

Journalbeat

Metrics

Metricbeat

Network traffic

Packetbeat

Windows event logs

Winlogbeat

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访问”。