Salt(Saltstack)は、Graphite、Ganglia、またはZenossのデータを収集して中継できますか?


11

新しいプロジェクトを開始し、AnsibleまたはSaltを使用して展開の自動化を検討しています。おそらく、より洗練されたオーケストレーション(サーバー管理とフェデレーション)を検討しています。

Saltを使用する場合、Salt 0mq接続を使用して、Saltの「ミニオン」からMonitoring / Graphingデータベース/コレクターにデータを中継するために、Salt 0mq接続を使用して、SiteGraphiteZenoss、またはGangliaの間に統合があるかどうか疑問に思っています。

他の誰かがこれを見ましたか?


あなたがしたいことをもっと詳しく説明してもらえますか?どのような尋問が必要ですか?
ジャミエブ

3
データ収集メカニズムとメッセージ転送としてSaltを使用する本格的な監視システムを目指したSalmonと呼ばれる新しいプロジェクトがあります。Whisperをデータベースとして使用しているので、本当に必要な場合は、おそらくそれをGraphiteに統合できます。
jgoldschrafe

回答:


9

私は今40ヶ月以上のノードを管理するために6ヶ月以上ソルトスタックを使用しました。

私の現在の設定では、私は使用します:

  • 監視サーバーとしてのIcinga
  • ノードでチェックを実行するためのNRPE
  • グラファイトは、収集されたノードからデータを収集します
  • メトリックを収集してグラファイトにプッシュするために収集
  • ghashを使用して、grahiteメトリックを視覚化する素敵なダッシュボードを作成します
  • salt-stack、最後にsalt-stackでNRPEの構成を展開します/各ノードで収集

これはCentOS 6.xで実行されます

これまでの私の経験は、すべてを登録するのに塩の山が良いということです。ただし、ノード上でデーモンを長期間実行すると、安定しません。

私はしばしば、塩分でマスターの達人または記憶肥大に到達しないという問題を抱えています。これは、塩分を24時間/週ごとに再起動するという簡単な回避策で修正できます。

しかし、ソルトミニオンのこの問題により、0mqフレームワークでデータを収集することができなくなります。

現在のセットアップは安全に実行されます。salt-stackを使用すると、変更を非常に迅速に登録でき、ノードで収集するのが効果的です。


私はこれを支持したくありませんでしたが、誠実さと品位によって私はそれをしなければなりませんでした。彼らは、メトリクスに一般化されたトランスポートを提供する素晴らしい可能性を確かに認識しています。私はすでに塩鉱山でこれのいくつかをしています。
ダンガースウェイト

[py] statsdで収集する理由
ダンガースウェイト

4

SaltやAnsibleはそのタスクのために作成されたものではなく、その目的には使用できないと思います。

私はSaltを数ヶ月使用していますが、あなたが望む機能のオプションに気づきませんでした(設定やドキュメントで)。ただし、Saltはpythonで記述されているため、オプションの場合は要件を「追加」できると思います。

最も簡単な方法は、システムに関するデータを収集できる(およびグラファイトへのコネクタを持つ)collectdをインストールするようにsaltを注文することです

編集:私は塩を使用して監視を実装するプロジェクトを見つけました- サーモン -見てください。


collectdは私の最初の考えでもありました。
J・アダムス

salt-monitorはメンテナンスされていませんgithub.com/thatch45/salt-monitor
Itai Frenkel

3

Sensuをご覧になるとよいでしょう。これは、グラファイトなどの多くのコミュニティプラグインとプラグ可能な監視ソリューションです。

ただし、Sensuは別のメッセージングキューRabbitMQを使用してメッセージを配信します。多少のコーディング作業が必要な場合もありますが、2つのメッセージングキューのどちらかがAMQプロトコルを使用してメッセージを交換する必要があるため、2つのメッセージングキューのいずれかを置き換えることができます。


2

次の2つのことを検討することをお勧めします。SaltMine- http://docs.saltstack.com/topics/mine/ Salt Events- http://docs.saltstack.com/topics/event/index.html

これらを独自のリターナ構成設定と組み合わせて、結果をグラファイトまたはリストした他のいずれかに保存する場合。おそらくソルトを使用して、トップダウンの「プロービング」とボトムアップの「イベンティング」を処理できます。このようなシステムの有効性についてコメントすることはできませんが、原理的には可能性があるようです。


塩のまだ実現されていない機能は、安全なスタートポロジイベントバスであることです。私は塩鉱山を使用してcheck_mk_agentを実行および保存し、nagiosサーバーのcheck_mkが鉱山からそれを引き出します。
ダンガースウェイト14

2

ここで、塩鉱山とcheck_mkを介したホストあたり1秒未満の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ごとではなくグローバルな設定です。1分に設定するとうまくいかない可能性のある重いmine関数がいくつかあります。
ジャグリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.