StatsD 和 CollectD 有什么关系?
我想设置 statsd/graphite,以便我可以记录在 HTML 设备上运行的 JS 应用程序(即不在包含的 LAN 环境中,并且可能有大量我无法直接控制的传入数据)。
我的限制:
总之,数据路径:[client] -(http)-> [http2statsd] -(udp)-> [statsd] -(tcp)-> [graphite] -(nfs)-> [filer]
到目前为止我的发现:
所以我想知道是否有人有经验和最佳实践可以分享一个可靠的 statsd/graphite 部署?
我正在尝试通过读取块内的 nc 向 statsd 发送一个小字符串:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,在 UDP 模式下, nc 似乎想无限期地等待,即使我已经指定了-q 0,手册页说这将使程序在 EOF 后立即退出。
我试过 pass -w 1,但是如果我发送的数据每秒超过一行,数据就会缓冲起来,我会丢失实时统计数据(更不用说冒某种缓冲区溢出的风险了)。
是否可以用 netcat 做我想要做的事情,还是我需要用具有 statsd 库的语言编写一些东西?
我有一个柜台,stats.message.foo想把它移到stats.messages.foo。
我已经更新了我的代码来填充新的计数器,但是旧的仍然存在。
我已经阅读了从石墨中删除统计数据所需要做的所有事情就是删除磁盘上适当的耳语文件,但是似乎在删除后几秒钟内wsp它会重新生成(没有数据)。
如果我想重命名存储数据的密钥,这很麻烦,因为我需要记住哪个密钥是正确的。
有谁知道如何永久删除旧计数器?
有没有 etsy 的statsd 的替代品?甚至是一个完整的类似仪表板的解决方案?我的研究只发现了专有的 SaaS 解决方案。
对于那些不知道的人:statsd 是一个守护进程,它通过 UDP 收集应用程序和系统指标并将它们发送到 Graphite 以生成或多或少漂亮的图。有一个适用于所有重要语言的 API。
我需要:
我正在运行一组负载测试以确定以下设置的性能:
Node.js test suite (client) --> StatsD (server) --> Graphite (server)
Run Code Online (Sandbox Code Playgroud)
简而言之,node.js 测试套件每 x 秒向位于另一台服务器上的 StatsD 实例发送一定数量的指标。然后 StatsD 每秒将指标刷新到位于同一服务器上的 Graphite 实例。然后,我查看测试套件实际发送了多少指标以及 Graphite 接收了多少指标,以确定测试套件和 Graphite 之间的丢包率。
但是我注意到我有时会遇到非常大的丢包率(请注意,它是通过 UDP 协议发送的),范围为 20-50%。所以那是我开始调查这些数据包被丢弃的地方的时候,认为这可能是 StatsD 的一些性能问题。所以我开始记录系统每个部分的指标,以追踪发生这种下降的地方。这就是事情变得奇怪的地方。
我正在使用tcpdump创建一个捕获文件,在测试运行完成后我会检查该文件。但是每当我在运行 tcpdump 的情况下运行测试时,几乎不存在丢包!看起来 tcpdump 以某种方式提高了我的测试的性能,我无法弄清楚它为什么以及如何做到这一点。我正在运行以下命令来记录服务器和客户端上的 tcpdump 消息:
tcpdump -i any -n port 8125 -w test.cap
Run Code Online (Sandbox Code Playgroud)
在一个特定的测试案例中,我发送 40000 个指标/秒。运行tcpdump的测试有4%左右的丢包,没有的时候有20%左右的丢包
两个系统都作为 Xen VM 运行,具有以下设置:
我已经检查过潜在原因的事情:
我正在statsdCentOS 6 上运行 node.js 服务 ( )。守护和启动此类服务的正确方法是什么?
潜在的守护进程——守护进程应该是特定于语言的还是通用的?:
-d标志?(例如通过node-daemonize2或永远监控?)服务启动器——它们应该来自系统/发行版,还是应该来自诸如 monit 之类的监控工具?:
不幸的是,我是新手——我在哪里可以阅读最标准、最经典、最可靠的方法?
我已经设置了 Graphite 和 statsd,两者都运行良好。我正在使用graphite/examples 中的example-client.py 来测量负载值,这没问题。
我开始用 statsd 做测试,起初看起来还可以,因为它生成了一些图表,但现在看起来不太好。
首先,这是我的storage-schema.conf:
priority = 100
pattern = .*
retentions = 1m:395d
Run Code Online (Sandbox Code Playgroud)
我正在使用此命令将数据发送到 statsd:
echo 'ssh.invalid_users:1|c'| nc -w 1 -u localhost 8126
Run Code Online (Sandbox Code Playgroud)
它执行,我在 Graphite Web 界面中单击 Update Graph,它生成一条线,再次点击 Update 并且该线消失。像this1和this2
如果我执行以前的命令5次,图线将达到2和它实际上将保存。再次运行相同的命令两次,图形线到达 2 并消失。
我找不到我配置错误的内容。
预期用途是这样的:
tail -n 0 -f /var/log/auth.log|grep --line-buffered "Invalid user" | while read line; do echo "ssh.invalid_users:1|c" | nc -w 1 -u localhost 8126; done
Run Code Online (Sandbox Code Playgroud)
编辑:
在一个全新的系统上,我使用最新版本的石墨、碳、nodejs、statsd 重新安装,它的作用相同。
在尾随 /opt/graphite/storage/log/carbon-cache/carbon-cache-a/query.log 时,我得到:
cache query …
我有一个带有 StatsD 守护进程的主机 (A) 在 127.0.0.1:8125 监听:
root@A# netstat -uln
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 127.0.0.1:8125 0.0.0.0:*
Run Code Online (Sandbox Code Playgroud)
一个 docker 容器 (B) 在主机 A 上启动,具有桥接网络:
root@A# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "02b013615710b375744975ff74bdd0b5dcc8c25debba4fa23ad8f53da2c684e3",
"Created": "2017-04-21T08:13:04.389253904Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"e1fde895c871504f64627c88531a380269ee9fe8a9fa5237a98c81500fa47a7a": {
"Name": "B",
"EndpointID": "4e4a8758e811bb48cecec67d339c182c60e1d955126506cddb7d451e818c5535",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": …Run Code Online (Sandbox Code Playgroud)