我正在使用 ELK 堆栈聚合我的日志。现在我想显示指标并使用它创建警报,例如当前 CPU 使用率、处理的请求数、数据库查询数等
我可以使用 Telegraf 或 StatsD 收集指标,但如何将它们插入 Logstash?这两个都没有 Logstash 输入。
这种方法是否有意义,或者我应该在不同的系统中聚合时间序列数据?我想把所有东西都放在一个引擎盖下。
我正在使用 ELK 堆栈聚合我的日志。现在我想显示指标并使用它创建警报,例如当前 CPU 使用率、处理的请求数、数据库查询数等
我可以使用 Telegraf 或 StatsD 收集指标,但如何将它们插入 Logstash?这两个都没有 Logstash 输入。
这种方法是否有意义,或者我应该在不同的系统中聚合时间序列数据?我想把所有东西都放在一个引擎盖下。
我可以为您提供一些有关如何使用 Telegraf 实现此目的的见解:
选项 1: Telegraf将TCP 输出到 Logstash。这就是我个人所做的,因为我喜欢让我的所有数据都通过 Logstash 进行标记和突变。
Telegraf 输出配置:
[[outputs.socket_writer]]
## URL to connect to
address = "tcp://$LOGSTASH_IP:8094"
Logstash 输入配置:
tcp {
port => 8094
}
选项 2:将Telegraf直接发送到 Elasticsearch。这方面的文档很好,应该告诉你该怎么做!
从意识形态的角度来看,将指标插入 ELK 堆栈可能是正确的做法,也可能不是正确的做法——这取决于您的用例。我转而使用 Telegraf/InfluxDB,因为我有很多指标,而且我的消费者更喜欢用于时间序列数据的 Influx 查询语法和一些其他 Influx 功能,例如汇总。
但是,通过将所有数据“置于一个引擎盖下”来降低复杂性,还有一些话要说。Elastic 也在推动使用 Timelion 更适合时间序列数据,并且在Elasticon上进行了一些关于在 Elasticsearch 中存储时间序列数据的讨论。这是一个。我会说将您的指标存储在 ELK 中是一件完全合理的事情。:)
让我知道这是否有帮助。
以下是将指标从 StatsD 存储到 ES 的各种选项:
metricbeat 配置示例:
metricbeat.modules:
- module: statsd
host: "localhost"
port: 8125
enabled: true
period: 2s