Salt (Saltstack) สามารถรวบรวมและถ่ายทอดข้อมูลสำหรับ Graphite, Ganglia หรือ Zenoss ได้หรือไม่?


11

ฉันเริ่มต้นโครงการใหม่และพิจารณาใช้AnsibleหรือSaltสำหรับการปรับใช้อัตโนมัติและบางทีอาจมีการประสานที่ซับซ้อนกว่าเดิม (การจัดการเซิร์ฟเวอร์และการรวมกลุ่ม)

ด้วย Salt ฉันสงสัยว่ามีการรวมกันระหว่างนั้นกับGraphiteหรือZenossหรือGanglia ... โดยใช้การเชื่อมต่อSalt 0mqเพื่อถ่ายทอดข้อมูลจาก "minions" Salt ไปยังฐานข้อมูลการติดตาม / การสะสม / การติดตาม

มีคนอื่นดูที่นี่หรือไม่


คุณช่วยอธิบายสิ่งที่คุณต้องการจะทำในรายละเอียดมากขึ้นได้ไหม? คุณต้องการการสอบสวนประเภทใด
jamieb

3
มีโครงการใหม่ที่เรียกว่าปลาแซลมอนที่มีจุดมุ่งหมายเพื่อให้เป็นระบบการตรวจสอบอย่างเต็มรูปแบบโดยใช้เกลือเป็นกลไกในการรวบรวมข้อมูลและการส่งข้อความ มันใช้ Whisper เป็นฐานข้อมูลเพื่อให้คุณสามารถรวมเข้ากับ Graphite ถ้าคุณต้องการ
jgoldschrafe

คำตอบ:


9

ฉันใช้ salt-stack มานานกว่า 6 เดือนในขณะนี้เพื่อจัดการ 40+ nodes

ในการตั้งค่าปัจจุบันของฉันฉันใช้:

  • Icingaเป็นเซิร์ฟเวอร์การตรวจสอบ
  • NRPEสำหรับการดำเนินการตรวจสอบบนโหนด
  • แกรไฟต์รวบรวมข้อมูลจากโหนด collectd
  • collectdสำหรับการรวบรวมและผลักดันตัวชี้วัดไปยังกราไฟท์
  • gdashสำหรับแดชบอร์ดที่ดีเพื่อให้เห็นภาพการวัด grahite
  • Salt-stackและSalt-stackสุดท้ายจะกำหนดค่า NRPE / Collectd ให้แต่ละโหนด

นี่ทำงานภายใต้ CentOS 6.x

ประสบการณ์ของฉันจนถึงตอนนี้ก็คือว่ากองเกลือนั้นดีสำหรับการลงทะเบียนทุกอย่าง แต่ถ้า Daemon รันระยะยาวบนโหนดมันจะไม่เสถียร

ฉันมักจะมีปัญหากับการไม่ถึงหลักหรือหน่วยความจำ bloating ในเกลือ -minion สิ่งนี้สามารถแก้ไขได้ด้วยวิธีแก้ปัญหาง่าย ๆ ที่คุณรีสตาร์ททุก ๆ 24 ชั่วโมง / ครั้งละหนึ่งครั้ง

แต่ปัญหานี้ใน salt-minion ทำให้ไม่สามารถรวบรวมข้อมูลผ่าน 0mq Framework ได้

การตั้งค่าปัจจุบันของฉันทำงานอย่างปลอดภัย ฉันสามารถลงทะเบียนการเปลี่ยนแปลงได้อย่างรวดเร็วด้วย salt-stack และการรวบรวมบนโหนดจะเป็นการหลอกลวง


ฉันไม่ต้องการลงคะแนนในเรื่องนี้ แต่ความซื่อสัตย์และความเหมาะสมบังคับให้ฉันทำ พวกเขาตระหนักถึงความเป็นไปได้ที่ยอดเยี่ยมในการให้บริการการขนส่งทั่วไปสำหรับตัวชี้วัด ฉันทำสิ่งนี้ผ่านทางเหมืองเกลือแล้ว
Dan Garthwaite

ทำไมต้องสะสมมากกว่า [py] statsd?
Dan Garthwaite

4

ฉันคิดว่า Salt หรือ Ansible ไม่ได้ถูกสร้างขึ้นสำหรับงานนั้นและฉันคิดว่าพวกเขาไม่สามารถใช้เพื่อจุดประสงค์นั้นได้

ฉันใช้ Salt เป็นเวลาหลายเดือนและฉันไม่สังเกตเห็นตัวเลือกฟังก์ชั่นที่คุณต้องการ (ใน configs หรือเอกสาร) แต่ฉันคิดว่าคุณสามารถ "เพิ่ม" ความต้องการของคุณได้เนื่องจาก Salt เขียนด้วย python หากเป็นตัวเลือก

วิธีที่ง่ายที่สุดคือการสั่งซื้อเกลือเพื่อติดตั้งcollectdซึ่งสามารถรวบรวมข้อมูลเกี่ยวกับระบบ (และมีตัวเชื่อมต่อกับกราไฟท์)

แก้ไข: ฉันพบโครงการที่ใช้การตรวจสอบโดยใช้เกลือ - ปลาแซลมอน - ดู


collectd ยังเป็นความคิดแรกของฉัน
J Adams

salt-monitor ไม่ได้รับการดูแลgithub.com/thatch45/salt-monitor
Itai Frenkel

3

คุณอาจต้องการดูSensuมันเป็นโซลูชันการตรวจสอบที่เสียบกับปลั๊กอินชุมชนจำนวนมากรวมถึงแกรไฟต์ในหมู่ผู้อื่น

อย่างไรก็ตาม Sensu ใช้คิวการส่งข้อความอื่นในการส่งข้อความ, RabbitMQ อาจจำเป็นต้องใช้งานการเข้ารหัสบางอย่าง แต่คุณสามารถลองแทนที่หนึ่งในสองคิวการส่งข้อความเนื่องจากทั้งคู่ควรใช้โปรโตคอล AMQ เพื่อแลกเปลี่ยนข้อความ


2

ฉันขอแนะนำให้คุณพิจารณาสองสิ่ง: Salt Mine - http://docs.saltstack.com/topics/mine/ Salt Events - http://docs.saltstack.com/topics/event/index.html

หากคุณรวมสิ่งเหล่านี้เข้ากับการตั้งค่าการกำหนดค่าของผู้ส่งคืนเพื่อเก็บผลลัพธ์เป็นไฟท์หรือรายการอื่น ๆ ที่คุณระบุไว้ คุณสามารถใช้เกลือเพื่อจัดการเหตุการณ์ 'ละเอียด' และจากล่างขึ้นบน 'เหตุการณ์' ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับประสิทธิภาพของระบบดังกล่าวได้ แต่โดยหลักการแล้วดูเหมือนจะเป็นไปได้


คุณสมบัติของเกลือที่ยังไม่เกิดขึ้นจริงคือมันเป็นรถบัสเหตุการณ์การรักษาความปลอดภัยของดาว ฉันใช้เหมืองเกลือเพื่อเรียกใช้และเก็บ check_mk_agent และ check_mk บนเซิร์ฟเวอร์ nagios ดึงมันออกมาจากเหมือง
Dan Garthwaite

2

ฉันสรุปการเดินทางของฉันไปยังการตรวจสอบย่อย nagios ต่อวินาทีโฮสต์ผ่านทางเหมืองเกลือและตรวจสอบที่นี่: http://garthwaite.org/saltmine_check_mk_agent.html

บทความเดินผ่านสัปดาห์แห่งการเปิดและปิดการแก้ไขเพื่อให้ทุกอย่างทำงานได้ ฉันจะสรุปวิธีแก้ปัญหา:

สร้างโมดูล check_mk ที่กำหนดเองสำหรับ minion ทั้งหมด:

#!/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')

ตั้งช่วงเวลาการขุดของ minion เป็นหนึ่งนาที:

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

กำหนดค่าเซิร์ฟเวอร์การมอนิเตอร์เพื่อดึงเอาต์พุต check_mk_agent ของ minion ทั้งหมดลงในไฟล์ json ไฟล์เดียวจากนั้นกำหนดค่า check_mk ให้เคียวรีไฟล์นั้นแทนเคียวรีเครือข่ายใด ๆ ทุกอย่างสำเร็จด้วยสคริปต์ต่อไปนี้บน minion การมอนิเตอร์:

#!/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)

อัปเดตทุกนาที:

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

สุดท้าย: เปลี่ยนแหล่งข้อมูลสำหรับเป้าหมาย nagios ทั้งหมดใน /etc/check_mk/main.mk:

datasource_programs = [
  ( '/etc/check_mk/mine_agent.py <HOST>', ['mine'], ALL_HOSTS ),
]

bad_interval ที่แย่เกินไปคือการตั้งค่าทั่วโลกไม่ใช่ต่อ mine_function ฉันมีบางฟังก์ชั่นที่หนักหน่วงซึ่งอาจทำได้ไม่ดีถ้าตั้งค่าเป็นนาที
jagguli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.