Bisakah Salt (Saltstack) mengumpulkan dan menyampaikan data untuk Graphite, Ganglia, atau Zenoss?

11

Saya memulai proyek baru dan mempertimbangkan menggunakan Ansible atau Salt untuk otomasi penyebaran dan, mungkin, orkestrasi yang lebih canggih (manajemen server dan federasi).

Dengan Salt saya bertanya-tanya apakah ada integrasi antara itu dan Graphite atau Zenoss atau Ganglia ... menggunakan koneksi Salt 0mq untuk menyampaikan data dari "pelayan" Garam ke database / kolektor pemantauan / grafik.

Adakah yang melihat ini?

Jim Dennis
sumber
Bisakah Anda menjelaskan apa yang ingin Anda lakukan dengan lebih detail? Jenis interogasi apa yang Anda butuhkan?
jamieb
3
Ada proyek baru bernama Salmon yang bertujuan untuk menjadi sistem pemantauan penuh menggunakan Garam sebagai mekanisme pengumpulan data dan transportasi pesan. Itu memang menggunakan Whisper sebagai databasenya, sehingga Anda dapat mengintegrasikannya ke dalam Graphite jika Anda benar-benar menginginkannya.
jgoldschrafe

Jawaban:

9

saya menggunakan tumpukan garam selama lebih dari 6 Bulan sekarang untuk mengelola 40+ node.

di setup saya saat ini saya menggunakan:

  • Icinga sebagai Server Pemantauan
  • NRPE untuk melakukan pemeriksaan pada Nodes
  • grafit mengumpulkan data dari kumpulan collectd
  • collectd untuk mengumpulkan dan mendorong metrik ke grafit
  • gdash untuk Dasbor yang bagus untuk memvisualisasikan metrik grahite
  • salt-stack dan akhirnya salt-stack untuk meluncurkan konfigurasi untuk NRPE / Collectd pada setiap node

apakah ini berjalan di bawah CentOS 6.x

expierience saya sejauh ini adalah bahwa tumpukan garam baik untuk mendaftarkan semuanya. Tetapi sebagai runing jangka panjang Daemon pada node, itu tidak stabil.

Saya sering mengalami masalah dengan tidak mencapai master atau memori kembung pada garam-minion. Ini dapat diperbaiki dengan dan solusi mudah yang Anda restart setiap 24 jam / sekali seminggu dengan garam-minion.

tetapi masalah ini dalam salt-minion membuatnya tidak dapat digunakan untuk mengumpulkan data melalui Kerangka 0mq.

pengaturan saya saat ini berjalan aman. Saya dapat mendaftarkan perubahan cukup cepat dengan tumpukan garam dan kumpulkan di node melakukan trik.

chifiebre
sumber
Saya tidak ingin membenarkan ini, tetapi kejujuran dan kesopanan memaksa saya untuk melakukannya. Mereka tentu sadar akan kemungkinan luar biasa menyediakan transportasi umum untuk metrik. Saya sudah melakukan ini melalui tambang garam.
Dan Garthwaite
Mengapa mengumpulkan lebih dari [py] statsd?
Dan Garthwaite
4

Saya pikir Salt atau Ansible tidak diciptakan untuk tugas itu dan saya pikir mereka tidak dapat digunakan untuk tujuan itu.

Saya menggunakan Garam selama beberapa bulan dan saya tidak memperhatikan opsi fungsi yang Anda inginkan (dalam konfigurasi atau dokumentasi). Tapi saya pikir Anda dapat "menambahkan" kebutuhan Anda karena Salt ditulis dengan python - jika itu pilihan.

Cara termudah adalah memesan garam untuk menginstal collectd yang dapat mengumpulkan data tentang sistem (dan memiliki konektor ke grafit)

EDIT: Saya menemukan proyek yang mengimplementasikan pemantauan menggunakan garam - salmon - lihatlah.

spinus
sumber
collectd juga pikiran pertama saya.
J Adams
salt-monitor tidak dirawat github.com/thatch45/salt-monitor
Itai Frenkel
3

Anda mungkin ingin melihat Sensu , ini adalah solusi pemantauan yang cocok dengan banyak plugin komunitas, termasuk antara lain grafit .

Namun Sensu menggunakan antrian pengiriman pesan lain untuk mengirim pesan, RabbitMQ . Mungkin diperlukan beberapa pekerjaan pengkodean, tetapi Anda dapat mencoba mengganti salah satu dari dua antrian pengiriman pesan, karena keduanya harus menggunakan protokol AMQ untuk bertukar pesan.

Giovanni Toraldo
sumber
2

Saya sarankan Anda melihat dua hal: Tambang Garam - http://docs.saltstack.com/topics/mine/ Acara Garam - http://docs.saltstack.com/topics/event/index.html

Jika Anda menggabungkan ini dengan pengaturan konfigurasi pengembalian Anda sendiri untuk menyimpan hasil dalam grafit, atau yang lain yang Anda daftarkan. Anda dapat menggunakan Garam untuk menangani 'penyelidikan' dari atas ke bawah dan 'acara' dari bawah ke atas. Saya tidak akan dapat mengomentari efektivitas sistem seperti itu, tetapi pada prinsipnya tampaknya ada kemungkinan.

Techdragon
sumber
Fitur garam yang belum direalisasi adalah bahwa ia adalah bus acara topologi bintang yang aman. Saya menggunakan tambang garam untuk menjalankan dan menyimpan check_mk_agent, dan check_mk pada server nagios menariknya dari tambang.
Dan Garthwaite
2

Saya menjabarkan perjalanan saya ke pemantauan nagios per sub-host kedua melalui penambangan garam dan check_mk di sini: http://garthwaite.org/saltmine_check_mk_agent.html

Artikel ini berjalan selama berminggu-minggu dengan on dan off mengotak-atik agar semuanya bekerja. Saya akan meringkas solusinya:

Buat modul check_mk khusus untuk semua antek:

#!/usr/bin/env python
''' Support for running check_mk_agent over salt '''
import os
import salt.utils
from salt.exceptions import SaltException

def __virtual__():
    ''' Only load the module if check_mk_agent is installed '''
    if os.path.exists('/usr/bin/check_mk_agent'):
        return 'check_mk'
    return False

def agent():
    ''' Return the output of check_mk_agent '''
    return __salt__['cmd.run']('/usr/bin/check_mk_agent')

Setel interval tambang minion ke satu menit:

salt '*' file.append /etc/salt/minion.d/mine.conf "mine_interval: 1"

Konfigurasikan server pemantauan untuk menarik semua output check_mk_agent antek ke dalam file json tunggal, kemudian konfigurasikan check_mk untuk meminta file itu alih-alih permintaan jaringan apa pun. Semua dilakukan dengan skrip berikut pada minion pemantauan:

#!/usr/bin/env python
import sys
import json
import fcntl

DATAFILE="/dev/shm/cmk.json"
NAG_UID = 105
NAG_GID = 107

def do_update():
    import os
    import salt.client

    caller = salt.client.Caller()
    data = caller.function('mine.get', '*', 'check_mk.agent')

    lockfile = open(DATAFILE+".lock", "w")
    fcntl.flock(lockfile, fcntl.LOCK_EX)

    datafile = open(DATAFILE, "w")
    datafile.write(json.dumps(data))

    for f in (DATAFILE, DATAFILE+".lock"):
        os.chmod(f, 0644)
        os.chown(f, NAG_UID, NAG_GID)

def get_agent(minion):
    lockfile = open(DATAFILE+".lock", "w")
    fcntl.flock(lockfile, fcntl.LOCK_SH)

    data = json.load(file(DATAFILE))
    return data[minion]

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "Usage: mine_agent.py --update | <minion id>"
    elif sys.argv[1] in ['--update', '-u']:
        do_update()
    else:
        minion = sys.argv[1]
        print get_agent(minion)

Perbarui setiap menit:

$ cat /etc/cron.d/retrieve_mined_minion_data
*/1 * * * * root /etc/check_mk/mine_agent.py --update

Akhirnya: Ubah sumber data untuk semua target nagios di /etc/check_mk/main.mk:

datasource_programs = [
  ( '/etc/check_mk/mine_agent.py <HOST>', ['mine'], ALL_HOSTS ),
]
Dan Garthwaite
sumber
terlalu buruk mine_interval adalah konfigurasi global tidak per fungsi mine_function, saya memiliki beberapa fungsi tambang berat yang mungkin tidak berfungsi dengan baik jika diatur ke satu menit.
jagguli