我一直在寻找这个,但没有找到任何人谈论如何设置和配置StatsD以及Graphite在不同的服务器上进行通信.我目前所有东西都在一个上运行,但我尝试将它们分开是不成功的.
这是我如何设置 StatsD exampleConfig.js
exampleconfig
{
graphitePort: 2003
, graphiteHost: "(graphite server IP)"
, port: 8125
}
Run Code Online (Sandbox Code Playgroud)
我能想到在另一个盒子上设置的唯一另一件事就是example-client.py.
currently it says this:
CARBON_SERVER = '127.0.0.1'
CARBON_PORT = 2003
Run Code Online (Sandbox Code Playgroud)
我认为它需要留在本地主机与同一服务器上的耳语或石墨进行通信.我有我的防火墙设置来监听2003,并使用数据包转储服务器确实从statsd获取UDP.它似乎没有被碳和石墨消耗掉.
我错过了什么?
还有什么建议用于缩放statsd石墨设置?我现在有自己的statsd和另一台服务器上的石墨+碳+耳语.statsd运行的能力最大还是石墨盒?我想知道这一点,因为我很快就会每天向服务器发送数百万比特的数据进行测试.
我有一个关于Graphite的问题,我正在使用node.js中的statsD.
我有一台服务器,我将运行几个实例,我想在所有实例中聚合如下的统计信息:
现在每个实例都会获得自己的文件夹,因为它以自己的图形开头,因为代码是:
stats.gauge('requestsPerSecond', reqCounter);
Run Code Online (Sandbox Code Playgroud)
我可以做一些类似的事情stats('/myServ/aggregates', reqCounter);,以便每个实例将其数据发送到石墨中的相同图形,除了使用stats.gauge('requestsPerSecond', reqCounter);?跟踪自己的图形?
我正在使用logstash,elasticsearch并kibana分析我的日志.当特定字符串通过emaillogstash中的输出进入日志时,我通过电子邮件发出警报:
email {
match => [ "Session Detected", "logline,*Session closed*" ]
...........................
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
现在,我想提醒一个字段的计数(超过阈值时):
例如,如果user是字段,我想在独特用户数超过5 时发出警报.
可以通过emaillogstash中的输出完成吗?
请帮忙.
编辑: 正如@Alcanzar告诉我做的那样:
配置文件:
if [server] == "Server2" and [logtype] == "ABClog" {
grok{
match => ["message", "%{TIMESTAMP_ISO8601:timestamp} %{HOSTNAME:server-name} abc\[%{INT:id}\]:
\(%{USERNAME:user}\) CMD \(%{GREEDYDATA:command}\)"]
}
metrics {
meter => ["%{user}"]
add_tag => "metric"
}
}
Run Code Online (Sandbox Code Playgroud)
所以根据上面的说法,为了server2和abclog我有一个grok模式来解析我的文件和在usergrok解析的字段上我希望应用度量.
我在上面的配置文件中做了这个,但是当我检查logstash控制台时,我得到了奇怪的行为-vv. …
给定 StatsD/Graphite 数据点如下所示
stats.counters.post.topic_1.user_1.count
stats.counters.post.topic_1.user_2.count
stats.counters.post.topic_2.user_3.count
stats.counters.post.topic_2.user_4.count
Run Code Online (Sandbox Code Playgroud)
我正在尝试绘制 3 件不同的事情
到目前为止,我已经收到了一些帖子
alias(summarize(sumSeries(stats.counters.post.*.*.count),"1hour"),"Total Posts")
Run Code Online (Sandbox Code Playgroud)
对于主题和用户,我有点卡住了。
我可以通过以下方式获得每个主题的系列/行:
aliasByNode(summarize(groupByNode(stats.counters.post.*.*.count, 3, "sumSeries"), "1hour"), 0)
Run Code Online (Sandbox Code Playgroud)
但是,这给出了每个主题的帖子数,而不是主题数。
我如何获得一段时间内的主题数量?由此,我确信我可以为用户应用同样的方法。
在我的config\environments\development.rb和config\environments\production.rb文件中,我设置了一些全局变量。在下面的示例中,我有Redis一个指向我们的缓存的Statsd实例和一个指向 DataDog 代理的实例。
config.x.cache = Redis.new(url: ENV["CACHE"])
config.x.statsd = Statsd.new('localhost', 8125)
Run Code Online (Sandbox Code Playgroud)
在 Redis 的情况下,我添加gem 'redis'到我的 gem 文件中,运行bundle install并且一切正常。然而,在 StatsD 的情况下,似乎我还需要require 'statsd'在development.rb和production.rb文件的顶部添加以便能够创建实例。当然,我也添加gem 'dogstatsd-ruby'到我的 gem 文件并运行了bundle install,但这似乎还不够。如果我不在require配置文件的顶部添加该语句,当我尝试运行我的 Rails 应用程序时,我会收到以下错误:
uninitialized constant Statsd (NameError)
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我必须require只在这种特殊情况下(StatsD)添加语句,或者有更好的方法来做到这一点?谢谢!
我正在努力理解 statsd 中仪表的概念。请解释它是如何工作的,以及一些何时有用的例子。
该文档是不是真的我清楚
设置仪表值。
stat:要设置的仪表的名称。值:仪表的当前值。rate: 一个采样率,一个介于 0 和 1 之间的浮点数。只会在这个百分比的时间内发送数据。statsd 服务器不考虑仪表的采样率。小心使用。delta:是否将其视为 delta 值或绝对值。有关更多详细信息,请参阅仪表类型。
我正在尝试配置统计接收器以将统计信息收集到statsd.
我已配置 envoy.yaml 如下:
admin:
access_log_path: /logs/envoy_access.log
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 8001
stats_sinks:
name: envoy.statsd
config:
tcp_cluster_name: statsd-exporter
static_resources:
...
clusters:
- name: app
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
hosts:
- socket_address:
address: {{appName}}
port_value: {{appPort}}
- name: statsd-exporter
connect_timeout: 0.25s
type: strict_dns
lb_policy: round_robin
hosts:
- socket_address:
address: statsd_exporter
port_value: 9125
Run Code Online (Sandbox Code Playgroud)
statsd在同一个 docker 网络中构建为容器。
当我使用 Envoy 和 statsd 运行 docker 容器时,Envoy 显示以下错误:
proxy_1 | [2019-05-06 04:50:38.006][27][info][main] [source/server/server.cc:516] exiting
proxy_1 | tcp statsd: …Run Code Online (Sandbox Code Playgroud) 最近我更新了airflow.cfg 以启用Statsd 指标。
我已将此设置注入到airflow.cfg中:
我正在注入这个配置:
AIRFLOW__SCHEDULER__STATSD_ON=True
AIRFLOW__SCHEDULER__STATSD_HOST=HOSTNAME
AIRFLOW__SCHEDULER__STATSD_PORT=9125
AIRFLOW__SCHEDULER__STATSD_PREFIX=airflow
Run Code Online (Sandbox Code Playgroud)
我没有使用标准的 Statsd 服务,而是使用 Statsd 协议的Statsd-exporter,因此据我所知,我可以直接指向 Airflow 将指标发送到 Stats-exporter。默认情况下,它在 9125 端口上工作。
Statsd-exporter 收到指标后,Prometheus 能够定期抓取它们。
一切都好,一切都好。此外,我将映射文件制作到 Statsd-exporter,其中使用了一些正则表达式,但是......我的问题是,当我打开 Statsd-exported(9102 端口)的 WEB UI 时,我看到了部分气流指标,但不是全部!.
文档说明了此处的指标列表
例如,我看到 Airflow 发送:ti_failures、ti_successes、dagbag_size 等。但是完全没有诸如:dag...duration 或 executor.open_slots 等指标。
非常感谢所有玩过 Statsd 和 Airflow 的人,因为我不知道:(
我想在 Prometheus 的帮助下监控我的气流工作日志。所以我在互联网上查找,发现 statsd-exporter 可以帮助我。但是,当我在 Airflow.cfg 中添加 statsd-exporter 所需的配置时,服务不会启动。
气流.cfg文件
[scheduler]
statsd_on = True
statsd_host = xxx.xxx.x.xxx
statsd_port = 9125
statsd_prefix = airflow
Run Code Online (Sandbox Code Playgroud)
当我在 Airflow.cfg 中添加这些行后重新启动服务时,它不会重新启动并在日志中抛出上述错误。
当我删除这些行时,它开始完美。
我通过 pip 安装了 statsd 和 statsd-exporter。任何人都可以提出任何更好的方法来做到这一点。
statsd ×10
graphite ×3
airflow ×2
datadog ×2
amazon-ec2 ×1
devops ×1
envoyproxy ×1
kibana ×1
lambda ×1
logstash ×1
metrics ×1
prometheus ×1
python ×1
riemann ×1
ruby ×1