Salt (Saltstack)는 Graphite, Ganglia 또는 Zenoss에 대한 데이터를 수집하고 릴레이 할 수 있습니까?


11

새 프로젝트를 시작하고 배포 자동화 및보다 정교한 오케스트레이션 (서버 관리 및 페더레이션)에 Ansible 또는 Salt 사용을 고려 하고 있습니다.

Salt를 사용하면 Salt 0mq 연결을 사용하여 Salt " minions "에서 모니터링 / 그래프 링 데이터베이스 / 수집기로 데이터를 릴레이하기 위해 Graphite 또는 Zenoss 또는 Ganglia 간에 통합이 있는지 궁금합니다 .

다른 사람이 이것을 보았습니까?


당신이하고자하는 것을 더 자세히 설명해 주시겠습니까? 어떤 유형의 심문이 필요합니까?
jamieb

3
데이터 수집 메커니즘 및 메시지 전송으로 Salt를 사용하는 완전한 모니터링 시스템을 목표로하는 Salmon 이라는 새로운 프로젝트 가 있습니다. Whisper를 데이터베이스로 사용하므로 원하는 경우 Graphite에 통합 할 수 있습니다.
jgoldschrafe 2016 년

답변:


9

나는 6 개월 이상 동안 소금 스택을 사용하여 40 개 이상의 노드를 관리했습니다.

내 현재 설정에서 다음을 사용합니다.

  • 모니터링 서버로서의 Icinga
  • 노드에서 검사를 실행하기위한 NRPE
  • 흑연 은 수집 된 노드에서 데이터를 수집합니다.
  • collectd 흑연에 메트릭을 수집하고 밀어
  • 화강암 지표를 시각화하기위한 멋진 대시 보드
  • NRPE에 대한 구성을 롤아웃하기위한 솔트 스택 및 마지막으로 솔트 스택 / 각 노드에서 수집

als는 CentOS 6.x에서 실행됩니다.

지금까지 나의 경험은 소금 스택이 모든 것을 등록하기에 좋다는 것입니다. 그러나 노드에서 장기간 데몬을 실행하면 안정적이지 않습니다.

나는 소금 미니언에 대한 마스터 또는 메모리 팽창에 도달하지 못하는 데 종종 문제가 있습니다. 이것은 소금 미니언을 일주일에 24 시간마다 다시 시작하는 해결 방법으로 쉽게 해결할 수 있습니다.

그러나 salt-minion의이 문제로 인해 0mq Framework를 통해 데이터를 수집 할 수 없습니다.

현재 설정이 안전합니다. 솔트 스택으로 변경 사항을 매우 빠르게 등록 할 수 있으며 노드에서 수집하면 트릭을 수행합니다.


나는 이것을 공표 하고 싶지 않았지만 정직과 품위로 인해 그렇게해야했습니다. 그들은 메트릭스에 대한 일반화 된 전송을 제공 할 수있는 놀라운 가능성을 확실히 알고 있습니다. 나는 이미 소금 광산을 통해이 중 일부를 수행합니다.
Dan Garthwaite

[py] statsd 이상 수집 된 이유는 무엇입니까?
Dan Garthwaite

4

Salt 또는 Ansible은 해당 작업을 위해 생성되지 않았으며 해당 목적으로 사용할 수 없다고 생각합니다.

몇 달 동안 Salt를 사용하고 있으며 원하는 구성 옵션 (구성 또는 문서)에 대해서는 알지 못했습니다. 그러나 Salt가 파이썬으로 작성되었으므로 요구 사항을 "추가"할 수 있다고 생각합니다.

가장 쉬운 방법은 시스템에 대한 데이터를 수집 할 수있는 수집 된 설치용 소금을 주문 하는 것입니다 (그리고 흑연에 커넥터가 있음)

편집 : 소금- 연어를 사용하여 모니터링을 구현하는 프로젝트를 찾았습니다 .


수집 된 것도 저의 첫 생각이었습니다.
J Adams

소금 모니터가 유지되지 github.com/thatch45/salt-monitor
이타 Frenkel을

3

Sensu를 살펴보고 싶을 수도 있습니다.이 제품 은 흑연을 포함하여 많은 커뮤니티 플러그인으로 플러그 가능한 모니터링 솔루션 입니다.

그러나 Sensu는 다른 메시징 큐를 사용하여 RabbitMQ 메시지를 전달합니다 . 일부 코딩 작업이 필요할 수 있지만 두 메시징 큐 중 하나를 교체하려면 AMQ 프로토콜을 사용하여 메시지를 교환해야하므로 두 메시지 큐 중 하나를 교체 할 수 있습니다.


2

소금 광산-http: //docs.saltstack.com/topics/mine/ 소금 사건 -http: //docs.saltstack.com/topics/event/index.html

이러한 결과를 자체 리턴 장치 구성 설정과 결합하여 결과를 흑연 또는 기타 나열된 결과로 저장하는 경우. 소금을 사용하여 하향식 '탐색'과 상향식 '이벤트'를 처리 할 수 ​​있습니다. 그러한 시스템의 효과에 대해서는 언급 할 수 없지만 원칙적으로 가능성이있는 것 같습니다.


아직 실현되지 않은 salt의 특징은 안전한 스타 토폴로지 이벤트 버스라는 것입니다. 나는 소금 광산을 사용하여 check_mk_agent를 실행하고 저장하며 nagios 서버의 check_mk가 광산에서 가져옵니다.
Dan Garthwaite

2

나는 소금 광산과 check_mk를 통해 호스트 당 초 당 nagios 모니터링으로의 여정을 설명했다 : http://garthwaite.org/saltmine_check_mk_agent.html

이 기사는 몇 주 동안 온 / 오프 땜질을 통해 모든 작업을 수행합니다. 해결책을 요약하겠습니다.

모든 미니언에 대한 사용자 정의 check_mk 모듈을 만듭니다.

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

미니언의 광산 간격을 1 분으로 설정하십시오.

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

모든 미니언의 check_mk_agent 출력을 단일 json 파일로 가져 오도록 모니터링 서버를 구성한 다음 네트워크 조회 대신 해당 파일을 조회하도록 check_mk를 구성하십시오. 모니터링 미니언에서 다음 스크립트를 사용하여 모두 달성했습니다.

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

마지막으로 /etc/check_mk/main.mk에서 모든 nagios 대상의 데이터 소스를 변경하십시오.

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

너무 나쁜 mine_interval은 mine_function이 아닌 전역 구성입니다. 분으로 설정하면 좋지 않은 광산 기능이 있습니다.
jagguli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.