我已经通过 Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) 和 nginx 和 PostgresSQL安装了 Graphite 。当我手动发送数据时,它会创建指标,但它的所有数据点都是“无”(也称为空)。如果我运行 Graphite 附带的 example-client.py,也会发生这种情况。
echo "jakub.test 42 $(date +%s)" | nc 0.0.0.0 2003 # Carbon listens at 2003
# A minute or so later:
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | head -n1
Sun May 4 12:19:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | tail -n1
Mon May 5 12:09:00 2014 None
$ whisper-fetch.py --pretty /opt/graphite/storage/whisper/jakub/test.wsp | grep -v None | wc -l
0
Run Code Online (Sandbox Code Playgroud)
和:
$ python /opt/graphite/examples/example-client.py
# Wait until it …Run Code Online (Sandbox Code Playgroud) 我正在通过 collectd 从服务器收集数据并将其存储在石墨中。我想使用 grafana 仪表板。我正在尝试为内存插件创建可视化。在石墨中,我看到的数据以 Mb 为单位,但在 Grafana 图中,我在 Y 轴上看到了奇怪的“Mib”或“Bil”。如何更改 grafana 测量单位?
所以过去几天我一直在玩石墨,我可以看到那里的潜力以及它为何如此强大。
我的主要问题是为什么我应该像 esty 一样在它前面使用 statsd 而其他很多人都这样做?截至目前,我没有看到在石墨前面放置另一个堆栈的大好处。
我希望有人可以清除它
我正在使用 Puppet 使用 pip 安装一些 Python 包。我使用的是 Puppet 2.7,所以我的包声明看起来像这样:
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
}
Run Code Online (Sandbox Code Playgroud)
问题是这个包和graphite-web包似乎都有一个错误,可以使用 pip 多次安装相同的版本。所以如果我sudo pip install carbon多次输入,pip 每次都会安装它。我相信这是软件包的错误。
这个错误似乎也让 Puppet 感到困惑,因为每次我配置我的系统carbon并graphite-web重新安装时。
因此,我想知道是否有办法解决这个明显的打包错误。我尝试了以下方法:
package { "carbon":
require => Class["graphite::prereqs::install"],
ensure => latest,
provider => pip,
creates => "/opt/graphite/bin/carbon-cache.py",
}
Run Code Online (Sandbox Code Playgroud)
...但我不能使用创建。有没有另一种方法可以告诉包声明在安装包之前查找文件?
我想我在这里误解了一些东西。我已经使用 Docker (sitespeedio/graphite) 安装了 Graphite,并为 Web 面板设置了基本身份验证。我打开了端口 2003 的防火墙以从其他服务器获取数据点,并且运行良好。
但是没有身份验证/授权。甚至我用来发送一些测试的 python lib 也不允许设置密码、令牌或其他身份验证机制。
如何保护我的 Graphite 安装?
我们的指标框上的 CPU 使用率间歇性地为 100%,导致:
渲染 Grafana 仪表板时出现“内部服务器错误”
在我们的机器上运行的唯一应用程序是带有 3 个子容器的 Docker
石墨
格拉法纳
机器规格
操作系统版本 Ubuntu 16.04 LTS
版本 16.04 (xenial)
内核版本 4.4.0-103-generic
Docker 版本 17.09.0-ce
CPU 4 核
内存 4096 MB
内存预留无限制
网络适配器管理
存储
驱动overlay2
Backing Filesystem extfs
Supports d_type true
Native Overlay Diff true
内存交换限制为 2.00GB
以下是来自 cAdvisor 的片段:
kworker 和 ksoftirqd 进程不断地将状态从“D”更改为“R”到“S”
机器规格是否适合此设置?
如何使 CPU 使用率达到“正常”水平?
编辑
我正在使用石墨版本 0.9.10 来读取ifHCInOctetsand ifHCOutOctets,我正在使用和插件进行轮询;我使用的是5.1.0 版。collectd snmpgraphite_writecollectd
数据毫无问题地到达石墨;但是,我想以每秒位数表示。为了测试我的统计数据是否正确,我开始了 CD iso 下载并观察了下载速率……它在 1.0Mbps 和 2.0Mbps 之间变化。
常识告诉您,您需要将八位字节计数器乘以 8 才能得到位;但是,似乎我需要除以 8 才能正确显示石墨。
当我乘以 0.125 比例因子时scale(scaleToSeconds(nonNegativeDerivative(<SERIES>), 60),0.125),公式正确转换为每秒位数,我看到 1Mpbs 和 2Mbps 之间的数字......

当我乘以 8.0 比例因子时scale(scaleToSeconds(nonNegativeDerivative(<SERIES>), 60),8),结果显然是错误的……图表峰值为 120Mbps。我知道这是错误的,因为这是一个具有 5M 上限的住宅电缆调制解调器。

问题:如果我将八位字节发送到石墨,为什么会scale(<foo>, 8)产生不正确的结果?
/opt/collectd/etc/collectd.conf
LoadPlugin syslog
LoadPlugin cpu
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin network
LoadPlugin snmp
LoadPlugin write_graphite
<Plugin snmp>
<Data "std_traffic">
Type "if_octets"
Table true
Instance "IF-MIB::ifName"
Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets"
</Data> …Run Code Online (Sandbox Code Playgroud) 我已经设置了 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 …
这是 CentOS 6.5 上一个相当新的 Graphite 安装。它通过 AMQP (RabbitMQ) 从 Sensu 接收指标。
作为概念验证,我有一个负载平均监视器每 60 秒向 sensu/graphite 报告数据。我可以看到数据到达 Graphite 的监听器日志。
如果我选择一些数据进行绘图,我只能看到我的经期在“过去 30 分钟”内的数据。(然后只有当我将线模式设置为“连接线”时它才可见,因为点消失了。)
如果我将时间段设置为“查看过去 31 分钟”,则所有数据都会从图表中消失。
我试过使用 storage-schemas.conf 但没有对这种行为做出任何明显的改变。
如果我超过 30 分钟,数据是否会以某种方式被丢弃、过滤掉?我要检查什么?
这是 storage-schemas.conf:
[load_averages]
pattern = \.load_avg\.
retentions = 10s:14d,1m:90d
Run Code Online (Sandbox Code Playgroud)