Nagios + Grafanaに基づくサーバーインフラストラクチャの視覚的監視

ナギオス+グラファナ



アトラスの私たちは、すべてが制御されているときが大好きです。 これは、サーバーインフラストラクチャ全体にも適用されます。サーバーインフラストラクチャは、長年にわたって、多数の仮想マシン、サービス、およびサービスから生体に変化しました。 戦闘サーバーの監視、データベース仮想マシン上のシステムリソースの変更の追跡、ビジネスプロセスの進行状況の監視など、アクティビティのITコンポーネントの重要な側面を観察する必要がありました。 疑問が生じました-これをどのように達成し、最も重要なのはどのツールを使用するか? 彼らはいくつかの既成のソリューションを探し始めました。 システムの状態に関する「最も価値のある」情報を提供すると思われる、有料/無料のサービスを試しました。 しかし、最終的には、すべてが奇妙な図表、図表、数字になりました。実際、これらは私たちにとって価値のないものでした。







だから、自分で何かを集める必要があることを理解するようになりました。 何でも監視できるように構成できる最も柔軟で高度なシステムであるNagiosを基盤とすることにしました。 セットアップ、設定、動作-クール! この奇跡のインターフェースが90年代半ばのどこかで立ち往生しているのは残念ですが、視覚的なコンポーネントを同じレベルにしたかったのです。







短い検索で、美しいダッシュボードを作成するためのソリューションのリーダーはGrafanaであることがわかりました。 そこで、NagiosからのすべてのモニタリングをGrafanaの美しいグラフの形でモニターに表示することにしました。 残った唯一の質問は、お互いに友達を作る方法でした。







共通の目標



Nagiosを使用してインフラストラクチャ全体を監視し、 Slackを使用してシステムの問題に関するアラートを設定し、システムパフォーマンスデータの出力をGrafanaグラフィカルシェルに接続して、リアルタイムで監視します。







画像



技術スタック





簡単な説明



Nagiosは、システム全体のあらゆる種類の仮想マシンから統計を収集します。 Grafanaが出力できるように、このデータを特定の形式で特定の間隔でデータベースに保存する必要があります。 Grafanaはいくつかの形式で動作しますが、最も便利なのはGraphiteです。 Graphiteは基本的に同じグラフィカルシェルですが、そのインターフェイスは明らかにNagiosインターフェイスと同じ人々によって作成されました。 内部では、彼は統計を保存するデータベースを持っています。 データはウィスパーであり、このデータを処理するレイヤーはCarbonです。 Nagiosは直接Graphiteと通信する方法を知らないため、賢い人はextを作成しました。 Nagiosから現在の読み取り値を取得してCarbonに渡すプラグイン-このプラグインはGraphiosと呼ばれます 。 したがって、私たちのタスクは6つの異なるテクノロジーをリンクすることです。 行こう!







すぐに小さな免責事項:







  1. 現在の構成はDebianで構築されていますが、一般的なアセンブリロジックはファミリ全体で同じです。
  2. この記事では、ネットワークがマニュアルでいっぱいであるため、Nagios自体のインストールと構成については説明しません(Nagiosを適切に構成する方法については別に書きます)。 それは、一連のテクノロジー同士のバンドルの問題になるでしょう-歌詞なし、純粋なカードコア。


カーボン



Carbonを設定および構成します。







apt-get install graphite-carbon sudo nano /etc/default/graphite-carbon
      
      





パラメーターの値をtrueに設定します。







 CARBON_CACHE_ENABLED=true
      
      





保存して終了します。







スキーマファイルの編集


 sudo nano /etc/carbon/storage-schemas.conf
      
      





このファイルには、statストレージオプションを指定するディレクティブが含まれています。 データ:保管頻度と保管期間。 私たち自身のために、およそ次のディレクティブを使用します。







 [atlas] pattern = .* retentions = 60s:1y
      
      





これは、データが毎分データベースに受信され、年間を通じて保存されることを意味します。 ニーズに合わせて値を修正します。







また、データベース内のデータストレージの頻度がNagios自身によるデータ出力の頻度を超えてはならないことを理解することが重要です。そうでない場合は、データベースに重複値を追加します。 初期状態では、Nagiosはすべてのサービスとホストを10分ごとにリッスンします。したがって、最大のリアルタイムを実現するには、Nagios側で処理間隔を変更する必要もあります。







最後の設定を接続し、Carbonを起動します。







 sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf sudo service carbon-cache start
      
      





データベース



今後のすべてのプログラムのベースを準備しています。 PostgreSQLをお勧めしますが、Graphiteはさまざまなデータベースをサポートしています。







 apt-get install postgresql libpq-dev python-psycopg2 sudo -u postgres psql
      
      





新しいユーザーとデータベースをセットアップします。







 CREATE USER graphite WITH PASSWORD 'password'; CREATE DATABASE graphite WITH OWNER graphite; \q
      
      





データベースからパスワードを保存する必要があります-それは私たちにとってまだ有用です。







グラフィオス



PythonDjangoをインストールしてから、 graphios自体をインストールします。







 apt-get install -y python2.6 python-pip python-cairo python-django python-django-tagging pip install graphios
      
      





ファイル/etc/graphios/graphios.cfgの編集:







 debug = False enable_carbon = True
      
      





統計アップロードを保存するためのフォルダーを作成します。







 mkdir /var/spool/nagios/graphios/ chown -R nagios:nagios /var/spool/nagios
      
      





テスト:


Nagiosサービス定義にテストラインを追加します。







 define service { use generic-service host_name DB service_description PING check_command check_ping!100.0,20%!500.0,60% _graphiteprefix monitoring.nagios01.pingto }
      
      





テストモードでGraphiosを呼び出します。







 /usr/local/bin/graphios.py --spool-directory /var/spool/nagios/graphios --log-file /tmp/graphios.log --backend carbon --server 127.0.0.1:2004 --test
      
      





出力には、次のようなレコードが表示されます。







 monitoring.nagios01.pingto.DB.rta 0.248000 1461427743 monitoring.nagios01.pingto.DB.pl 0 1461427743
      
      





すべてが正常な場合-graphiosデーモンを実行します。







 service graphios start
      
      





黒鉛



GraphiteはCarbonのインストール後に厳密にインストールする必要があります。そうしないと、Nagios / Graphiosはデータを正しく送信できません。



主な依存関係をインストールする


 apt-get install -y libapache2-mod-wsgi python-twisted python-memcache python-pysqlite2 python-simplejson pip install whisper pip install carbon pip install graphite-web pip install pytz pip install pyparsing wget https://raw.github.com/tmm1/graphite/master/examples/example-graphite-vhost.conf -O /etc/apache2/sites-available/graphite
      
      





次に、新しいApache2構成をわずかに修正する必要があります。







 nano /etc/apache2/sites-available/graphite
      
      





「WSGISocketPrefix / etc / httpd / wsgi /」を次のように変更します。







 WSGISocketPrefix /var/run/apache2/wsgi
      
      





「エイリアス/コンテンツ/ / opt /グラファイト/ webapp /コンテンツ/」行の後に別のエイリアスを追加します。







 Alias /static/ "/opt/graphite/static/"
      
      





保存して終了します。







local_settings.pyを構成します


 cd /opt/graphite/webapp/graphite cp local_settings.py.example local_settings.py nano local_settings.py
      
      





開いたファイルに、行を含めて値を書き留めます。







SECRET_KEYを作成する必要があり、以前に作成したデータベースからDATABASEディレクティブの値を取得します。

WHISPER_DIRの値は、「 locate whisper 」コマンドで見つけることができます。







CARBONLINK_HOSTSディレクティブの値は、コマンド「 lsof -i -P | grep carbon 」の出力に従って入力する必要あります。







 SECRET_KEY = 'some_secret_key' TIME_ZONE = 'Europe/Moscow' WHISPER_DIR = '/var/lib/graphite/whisper' USE_REMOTE_USER_AUTHENTICATION = True DATABASES = { 'default': { 'NAME': 'graphite', 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'USER': 'graphite', 'PASSWORD': 'password', 'HOST': '127.0.0.1', 'PORT': '' } } CARBONLINK_HOSTS = ["127.0.0.1:2003","127.0.0.1:2004","127.0.0.1:7002"]
      
      





グラファイトをカスタマイズする


構成プロセス中に、システムはスーパーユーザーの取得を要求します。 新しい値を書き留めて覚えておく必要があります。







 cd /opt/graphite/conf/ cp graphite.wsgi.example graphite.wsgi cd /opt/graphite/webapp/graphite python manage.py syncdb chown -R www-data:www-data /opt/graphite/storage/ a2enmod wsgi a2ensite graphite python manage.py collectstatic --pythonpath=/opt/graphite/webapp chown -R www-data:www-data /opt/graphite/static /etc/init.d/apache2 restart
      
      





グラファナ



最も簡単な部分-Graphite / Carbonが正しく構成されている場合-Graphiteのような新しいリソースを接続し、データ出力用のダッシュボードをセットアップするだけ-Grafanaが残りを行います!







 wget https://grafanarel.s3.amazonaws.com/builds/grafana_3.0.0-beta51460725904_amd64.deb sudo apt-get install -y adduser libfontconfig sudo dpkg -i grafana_3.0.0-beta51460725904_amd64.deb sudo service grafana-server start sudo update-rc.d grafana-server defaults 95 10
      
      





インターフェイスはポート3000で使用可能になります。 デフォルトのユーザー名/パスワードはadminです。







ボーナス:Slack Nagiosアプリ



直接的な視覚化と受動的な文字の代替として、Nagiosからのアラートの出力をSlackに接続します。







1) #alertsなど、Slackに新しいチャネルを作成します







2) Slackアプリのページに移動します







画像

3) Nagiosアプリを見つける







画像

4)設定をダウンロードするための指示に従ってください







 wget https://raw.github.com/tinyspeck/services-examples/master/nagios.pl cp nagios.pl /usr/local/bin/slack_nagios.pl chmod 755 /usr/local/bin/slack_nagios.pl
      
      





5)トークンとSlackドメインをコピーして、新しい構成/usr/local/bin/slack_nagios.plに貼り付けます







画像

6)Nagiosディレクティブをコピーし、適切な場所(コマンドと新しい連絡先)に貼り付けます







 define contactgroup { contactgroup_name admins alias Nagios Administrators members root,slack } define contact { contact_name slack alias Slack service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-slack host_notification_commands notify-host-by-slack } define command { command_name notify-service-by-slack command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#alerts -field HOSTALIAS="$HOSTADDRESS$" -field SERVICEDESC="$SERVICEDESC$" -field SERVICESTATE="$SERVICESTATE$" -field SERVICEOUTPUT="$SERVICEOUTPUT$ ($LONGDATETIME$)" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$" } define command { command_name notify-host-by-slack command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#alerts -field HOSTALIAS="$HOSTADDRESS$" -field HOSTSTATE="$HOSTSTATE$" -field HOSTOUTPUT="$HOSTOUTPUT$ ($LONGDATETIME$)" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$" }
      
      





7)保存し、Nagiosをオーバーロードし、確認します。







有用な資料:



» Ubuntu 14.04でStatsDを構成してGraphiteの任意の統計を収集する方法

» Ubuntu 14.04サーバーにGraphiteをインストールして使用する方法

» Https://github.com/shawn-sterling/graphios

» Http://grafana.org/features/#graphite








All Articles