Monitoring

即使我發送數據,Graphite 對所有數據點都顯示“無”

  • July 10, 2018

我已經通過 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

和:

$ python /opt/graphite/examples/example-client.py 
# Wait until it sends two batches of data ...
$ whisper-fetch.py /opt/graphite/storage/whisper/system/loadavg_15min.wsp | grep -v None | wc -l
0

根據 ngrep,這是到達埠的數據

$$ from a later attempt $$(第 3 行):

####
T 127.0.0.1:34696 -> 127.0.0.1:2003 [AP]
 jakub.test  45 1399362193. 
####^Cexit
23 received, 0 dropped

這是相關部分/opt/graphite/conf/storage-schemas.conf

[default]
pattern = .*
retentions = 1s:30m,1m:1d,5m:2y

知道有什麼問題嗎?Carbon 自己的指標和數據顯示在 UI 中。謝謝!

環境:Ubuntu 13.10 Saucy,graphite 0.9.12(通過 pip)。

PS:我在這裡寫過我的故障排除嘗試 - Graphite Shows Metrics But No Data - Troubleshooting

更新

  1. 即使保留策略指定了更高的精度,例如“1s”或“10s”,耳語文件中的數據點也僅每 1m 分鐘記錄一次。
  2. 數據被忽略的解決方法:使用聚合模式xFilesFactor = 0.1(而不是 0.5)或將最低精度設置為 1m 而不是 <number between 1-49>s。- 請參閱已接受答案或 Graphite Answers qustion 下方的評論。根據文件:“xFilesFactor應該是介於 0 和 1 之間的浮點數,並指定前一個保留級別的槽必須具有非空值才能聚合為非空值。預設值為 0.5。 ”因此,似乎不考慮指定精度為 1 秒,數據聚合到 1 分鐘並最終為無,因為在分鐘期間不到 50% 的值是非無的。

解決方案

所以@jlawrie 引導我找到解決方案。事實證明,數據實際上是存在的,但聚合到什麼都沒有,原因是雙重的:

  1. UI 和 Whisper-fetch 都顯示聚合到跨越整個查詢週期的最高精度的數據,預設為 24 小時。即保留率 < 1d 的任何內容都不會在 UI 中顯示或獲取,除非您選擇更短的時間段。由於我 1 秒的保留期為 30 分鐘,因此我需要選擇 <= 最後 30 分鐘的時間段,才能真正看到收集的最高精度的原始數據。
  2. 在聚合數據時(在我的例子中是從 1 秒到 1 分鐘),Graphite 預設要求該週期內 50%(xFilesFactor = 0.5)的數據點具有價值。如果不是,它將忽略現有值並將其聚合為無。因此,在我的情況下,我需要在一分鐘內至少發送 30 次數據(30 是 60 秒的 50% = 1 分鐘),以便它們顯示在聚合的 1 分鐘值中。但是我的應用程序每 10 秒才發送一次數據,所以在可能的 60 個值中我只有 6 個。

=> 解決方案是將第一個精度從 1s 更改為 10s 並記住在我想查看原始數據時選擇更短的時間段(或將其保留時間延長到 24 小時以預設顯示)。

我使用同一個木偶模組遇到了同樣的問題。我不確定為什麼,但更改預設保留策略似乎可以解決它,例如

class { 'graphite':
 gr_storage_schemas =&gt; [
   {
     name       =&gt; 'carbon',
     pattern    =&gt; '^carbon\.',
     retentions =&gt; '1m:90d'
   },
   {
     name       =&gt; 'default',
     pattern    =&gt; '.*',
     retentions =&gt; '1m:14d'
   }
 ],
}

Graphite 會通過多種方式失去數據,這就是我真正盡量避免使用它的原因。讓我從一個簡單的開始 - 嘗試讓您的應用程序連接,等待一秒鐘(字面意思是一秒鐘),然後輸出帶時間戳的數據。我發現在許多情況下這將解決這個確切的問題。您應該嘗試的另一件事是以比石墨記錄數據的頻率高得多的頻率送出數據。我會再談一點。另一個常見的錯誤是使用了whisper-resize.py 實用程序,它對我真的不起作用。如果您的數據還不重要,只需刪除耳語文件並使用新的保留設置創建它們。

Graphite 的儲存文件,whisper 文件,而不是將數據儲存為具有值和時間的點(就像您提供的程序一樣)實際上將其儲存為具有儲存值的一系列槽。程序然後嘗試使用保留數據文件找出對應於時間段的時間段。如果它獲得的數據不完全適合插槽,我認為發生的情況是它使用平均值、最小值或最大值,具體取決於與保留文件位於同一目錄中的另一個文件。我發現最好的辦法是避免把一切搞砸,以遠高於石墨儲存數據的頻率送出數據。老實說,它變得超級複雜 - 不僅有石墨的保留期,以及填充點的平均算法(我認為),而且這些值也適用於耳語文件。當這些不匹配時會發生非常奇怪的事情,所以在您的配置正常工作之前,我建議您反复刪除您的耳語文件,並讓石墨重新創建它們。

這個程序確實給我留下了相當多的錯誤,所以如果你遇到這樣的事情,不要認為這是你的錯。

引用自:https://serverfault.com/questions/593157