Graphite menunjukkan "Tidak Ada" untuk semua titik data meskipun saya mengirimkannya data

8

Saya telah menginstal Graphite via Puppet ( https://forge.puppetlabs.com/dwerder/graphite ) dengan nginx dan PostgresSQL. Ketika saya mengirim data secara manual, ia membuat metrik tetapi semua titik datanya adalah "Tidak Ada" (alias nol). Ini terjadi juga jika saya menjalankan example-client.py yang dikirim dengan Graphite.

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

Dan:

$ 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

Menurut ngrep, ini adalah data yang tiba ke port [dari upaya selanjutnya] (baris 3):

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

Ini adalah bagian yang relevan dari /opt/graphite/conf/storage-schemas.conf:

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

Apakah ada yang salah? Metrik dan data Carbon ditampilkan di UI. Terima kasih!

Lingkungan: Ubuntu 13.10 Saucy, graphite 0.9.12 (via pip).

PS: Saya telah menulis tentang upaya pemecahan masalah saya di sini - Graphite Shows Metrics But No Data - Troubleshooting

PEMBARUAN :

  1. Poin data dalam file bisikan hanya di-recored setiap 1m mnt bahkan jika kebijakan retensi menentukan presisi yang lebih tinggi seperti "1s" atau "10s".
  2. Penanganan masalah untuk data yang diabaikan: Gunakan skema agregasi dengan xFilesFactor = 0.1(alih-alih 0,5) atau atur presisi terendah ke 1m alih-alih <angka antara 1-49> dtk. - lihat komentar di bawah jawaban yang diterima atau jawaban Graphite. Menurut dokumen : " xFilesFactorharus berupa angka titik mengambang antara 0 dan 1, dan menentukan fraksi apa dari slot tingkat retensi sebelumnya yang harus memiliki nilai bukan nol agar dapat digabungkan menjadi nilai bukan nol. Standarnya adalah 0,5. " Jadi tampaknya tanpa mempedulikan ketelitian 1s, data akan dikumpulkan menjadi 1 menit dan akhirnya menjadi Tidak ada karena kurang dari 50% dari nilai dalam periode menit adalah Non-Tidak ada.

LARUTAN

Jadi @jlawrie membawa saya ke solusinya. Ternyata data tersebut sebenarnya ada tetapi tidak teragregasi, alasannya ganda:

  1. Baik UI dan whisper-fetch menunjukkan data yang dikumpulkan dengan presisi tertinggi yang mencakup seluruh periode kueri, yang standarnya menjadi 24 jam. Yaitu apa pun dengan retensi <1d tidak akan pernah ditampilkan di UI atau diambil kecuali Anda memilih periode yang lebih pendek. Karena periode retensi saya untuk 1s adalah 30 menit, saya harus memilih periode <= 30 menit terakhir untuk benar-benar melihat data mentah pada presisi tertinggi yang dikumpulkan.
  2. Ketika menggabungkan data (dari 1 hingga 1 menit dalam kasus saya), Graphite secara default mengharuskan 50% (xFilesFactor = 0,5) titik data dalam periode memiliki nilai. Jika tidak, itu akan mengabaikan nilai yang ada dan menggabungkannya ke Tidak ada. Jadi, dalam kasus saya, saya harus mengirim data setidaknya 30 kali dalam satu menit (30 adalah 50% dari 60dt = 1 mnt) agar mereka muncul dalam nilai agregat 1-mnt. Tetapi aplikasi saya hanya mengirim data setiap 10 jadi saya hanya memiliki 6 dari kemungkinan 60 nilai.

=> solusinya adalah mengubah presisi pertama dari 1s menjadi 10s dan ingat untuk memilih periode yang lebih pendek ketika saya ingin melihat data mentah (atau memperpanjang penyimpanannya menjadi 24 jam untuk menunjukkannya secara default).

Jakub Holý
sumber
Pertanyaan Graphite Answers Dataset diisi dengan nulls? menarik dalam konteks ini (menyebutkan penambahan default null setiap 60-an, hanya 24 jam terakhir) dan b / c rekomendasinya tentang ngrep untuk pemecahan masalah.
Jakub Holý
Saya telah meminta bantuan juga di Graphite Answers - answer.launchpad.net/graphite/+question/248242
Jakub Holý
Sudahkah Anda memeriksa log? Jika ada masalah dengan metrik yang diterima (bukan \ n atau gunakan \ r \ n sebagai gantinya), Anda akan melihat sesuatu di console.log atau create.log. Log ini disimpan di / opt / graphite / storage / log / carbon-cache / carbon-cache-a / jika Anda menggunakan jalur instal default.
mattsn0w
Ya, saya sudah memeriksa log. Tidak ada yang menarik. Log konsol pada dasarnya hanya "[..] ServerFactory mulai dari 7002 [..] Mulai pabrik <twisted.internet.protocol.ServerFactory misalnya di 0x1bc4248>" dan memiliki catatan untuk membuat metrik yang diharapkan tetapi tidak menyebutkan data - f. ex. (untuk metrik tanpa data lainnya) "[..] membuat file database /opt/graphite/storage/whisper/ring/handling-time/POST/15MinuteRate.wsp (arsip = [(1, 1800), (60, 1440) ), (300, 210240)] xff = 0,5 agg = rata-rata) "
Jakub Holý
@ JakubHolý Bisakah Anda memperbarui jawaban jlawrie atau memposting jawaban lain karena pertanyaan itu berisi jawaban sekarang
030

Jawaban:

8

Saya mengalami masalah yang sama menggunakan modul boneka yang sama. Saya tidak yakin mengapa, tetapi mengubah kebijakan penyimpanan default tampaknya untuk memperbaikinya, misalnya

class { 'graphite':
  gr_storage_schemas => [
    {
      name       => 'carbon',
      pattern    => '^carbon\.',
      retentions => '1m:90d'
    },
    {
      name       => 'default',
      pattern    => '.*',
      retentions => '1m:14d'
    }
  ],
}
jlawrie
sumber
Terima kasih banyak! Perubahan misterius ini sangat membantu. Menarik bahwa mengubah retensi dari "1s: 30m, 1m: 1d, 5m: 2y" menjadi "1m: 14d" tidak "memperbaikinya". Saya akan mencoba bermain lebih banyak dengannya. Mungkin ada beberapa masalah dengan granularity 1s?
Jakub Holý
Tampaknya memang ada masalah dengan periode - sementara '1m:1d,5m:2ybekerja (data recored), 10s:30m,1m:1d,5m:2ytidak. Sebenarnya, dari file .wsp tampaknya granularity <1m diabaikan sejak cap waktu untuk 10-an: ... konfigurasi masih dalam interval 1 menit - "08:17:00, 08:18:00, dll."
Jakub Holý
OK, jadi masalahnya terkait dengan kebijakan agregasi dan xFilesFactor, (default) yang berlaku di sini adalah rata-rata dan xFilesFactor=0.5(lihat /opt/graphite/conf/storage-aggregation.conf). Ketika saya mengubah ke sumdan 0.1dengan mengubah nama, data akan disimpan (meskipun poinnya masih di 1m freq):echo -e "jakub.test.10s30m+1m1d+5m2y.count 42 $(date +%s)" | nc 0.0.0.0 2003
Jakub Holý
Saya sudah bermain dengan diff. agregat. skema, data direkam (pada interval 1m) ketika saya mengatur xFilesFactor = 0.1, gt. Metode tidak masalah (setidaknya semua rata-rata, terakhir, jumlah pekerjaan).
Jakub Holý
Menurut ini , skema agregasi hanya ikut bermain dengan beberapa kebijakan retensi. Jika saya hanya memiliki satu kebijakan penyimpanan, bahkan pada resolusi 10 detik (yaitu seberapa sering saya mengirim data), itu mengumpulkan setiap titik data individu. Dengan beberapa kebijakan penyimpanan, ia memilih kebijakan yang didasarkan pada rentang waktu kueri, yang dengan default whisper-fetch.py ​​hingga hari terakhir, yang saya pikir mengapa Anda hanya melihat titik data setiap 1 menit. Masih tidak yakin mengapa mereka tidak menampilkan None, alih-alih nilai agregat.
jlawrie
1

Ada banyak cara Graphite akan kehilangan data, itulah sebabnya saya benar-benar mencoba untuk tidak menggunakannya. Biarkan saya mulai dengan yang sederhana - coba sambungkan aplikasi Anda, tunggu sebentar (secara harfiah satu detik) dan kemudian tampilkan data timestamped. Saya telah menemukan dalam banyak keadaan ini akan memperbaiki masalah itu. Hal lain yang harus Anda coba adalah mengirimkan data pada frekuensi yang jauh lebih tinggi daripada frekuensi di mana grafit mencatat data. Saya akan membahasnya sedikit lagi. Kesalahan lain yang sering terjadi adalah menggunakan utilitas whisper-resize.py, yang benar-benar tidak berhasil untuk saya. Jika data Anda belum penting, hapus saja file bisikan dan biarkan dibuat dengan pengaturan retensi baru.

File penyimpanan Graphite, file bisikan, alih-alih menyimpan data sebagai titik dengan nilai dan waktu (seperti yang Anda berikan pada program) sebenarnya menyimpannya sebagai serangkaian slot tempat nilai disimpan. Program kemudian mencoba untuk mencari tahu slot apa yang sesuai dengan periode waktu menggunakan file data retensi. Jika mendapat data yang tidak persis pas di slot, saya pikirapa yang terjadi adalah ia menggunakan rata-rata, min, atau maks tergantung pada file lain di direktori yang sama dengan file retensi. Saya menemukan bahwa cara terbaik untuk menjaga agar tidak mengacaukan segalanya adalah dengan mengirimkan data pada frekuensi yang jauh lebih tinggi daripada frekuensi di mana grafit menyimpan data. Sejujurnya menjadi super rumit - tidak hanya ada periode retensi untuk grafit, dan rata-rata algoritma yang mengisi poin (saya pikir), tetapi nilai-nilai ini juga JUGA diterapkan pada file bisikan. Hal-hal yang sangat aneh akan terjadi ketika ini tidak cocok, jadi sampai konfigurasi Anda berfungsi, saya sarankan menghapus file bisikan Anda berulang kali, dan membiarkan grafit membuatnya kembali.

Program ini benar-benar mengejutkan saya karena bertindak cukup buggy, jadi jika Anda menemukan sesuatu seperti ini jangan menganggap itu salah Anda.

Beberapa Linux Nerd
sumber
Terima kasih, saya kira saya harus belajar lebih lanjut tentang bagaimana pengambilan data dan agregasi bekerja, mungkin memang itulah penyebab masalahnya. Namun saya berpikir bahwa " mengirimkan data pada frekuensi yang jauh lebih tinggi daripada frekuensi di mana grafit menyimpan data " adalah solusi suboptimal karena hanya titik data terakhir yang diterima dalam setiap periode grafit dicatat, yang lain diabaikan - itulah sebabnya f.ex . statsD flush period harus = Periode grafit .
Jakub Holý
1
BTW, Grafit / Karbon "kehilangan" data bisa terkait dengan pengaturan Karbon seperti MAX_UPDATES_PER_SECOND = 500, MAX_CREATES_PER_MINUTE = 50 (Saya kira poin data / metrik di atas batas baru saja turun).
Jakub Holý
Sepertinya saya salah, dokumentasi - jika saya menafsirkannya dengan benar - mengatakan pengaturan di atas membatasi akses disk tetapi data / metrik masih tersimpan dalam memori (meskipun saya ingin benar-benar memverifikasi ini dulu).
Jakub Holý
Beberapa dari mereka pasti bisa menjelaskan beberapa masalah yang saya miliki dengan aplikasi itu.
Beberapa Nerd Linux