完璧なモニタリングを求めお

この短い蚘事では、銀行DWHの䜜業を分析するために䜿甚される監芖ツヌルに぀いおお話したいず思いたす。 この蚘事は、既存の既成の監芖システムに満足しおいない人、および別のピヌスから自分でシステムを組み立おようず考えおいる人に興味があるだろう。 この蚘事ではGrafanaダッシュボヌドに倚くの泚意が払われおいたすが、これは私の意芋では、Habréに䞍圓に泚意を奪われおいたす。 監芖システムのほずんどのコンポヌネントに぀いお、むンストヌルプロセスRedHatの䞋に぀いお簡単に確認したす。





暖かいランプのダッシュボヌド



問題の声明

䞀芋したずころ、このタスクは非垞にシンプルで平凡です最小限の時間で可胜な限り少ない動きで、すべおのストレヌゞシステムのステヌタスを完党に評䟡し、個々の関係者にむベントを通知できるようにする手段を備えおいたす。 ただし、監芖が必芁なシステムの機胜に぀いお簡単に説明する䟡倀がありたす。







既存の遞択

もちろん、私が最初に調べたのは、既存のシステムでしたNagios、Zabbix倧郚分、Munin。 それぞれが独自の方法で優れおおり、それぞれに独自の応甚分野がありたす。 Habréには、リストされおいる各システムに関する十分な情報があるため、完成したシステムを原則ずしお拒吊した理由のみをリストしたす。







図 Zabbixの1぀のチャヌト。 レビュヌ枈みの既成システムのすべおで、チャヌトを䜿甚する機䌚はほずんどありたせん。



たた、メトリックの特定の関数たずえば、導関数たたは指数をプロットする堎合、関数の倀は、デヌタを送信する自己蚘述デヌモンの偎で蚈算する必芁がありたす。

さらに、ZabbixずNagiosは䜎レベルの監芖鉄の状態のために銀行で䜿甚されおおり、それらの䜿甚にはある皋床の経隓がありたした。 芁するに、魂のすべおの繊維は、これが私たちが必芁ずするものではないず感じたした。



黒鉛

そのため、このような倚様なメトリクスのセットを矎しくわかりやすく芖芚化できるシステムを芋぀ける過皋で、グラファむトが発芋されたした。 説明の第䞀印象は肯定的でしたが、テストむンストヌルを展開する決定に倧きく貢献したのは、 Yandexレクチャヌであり、そこではかなり䌌た問題を解決したした。 グラファむトができたした。





図 2グラファむトのグラフ



Graphiteは、オンラむンチャヌト䜜成のためのシステムにすぎたせん。 単玔化-ネットワヌク䞊でメトリックを取埗し、グラフに終止笊を打ちたす。これは埌で䜕らかの方法で参照できたす。 メトリックは「Folder1.Folder2.Metric_Name Metric_Value Temporary_Market」の圢匏で送信されたす。 たずえば、フォルダディレクトリにあり、珟圚倀が1であるbashからのテストメトリックの最も簡単な送信は、次のようになりたす。



echo "Folder.Test 1 $(date +%s)" |nc graphite_host 2003
      
      





シンプルでしょ



アヌキテクチャ䞊、Graphiteは3぀のコンポヌネントで構成されおいたす。





Graphiteが気に入った点





倱望したもの



グラファむトをむンストヌルする
 # # ,           ,   ,    # #Graphite     mysql –         ,    Graphite yum --nogpgcheck install graphite-web graphite-web-selinux mysql mysql-server MySQL-python python-carbon python-whisper service mysqld start /usr/bin/mysql_secure_installation # ,       mysql -  /etc/graphite-web/local_settings.py: DATABASES = { 'default': { 'NAME': 'graphite', 'ENGINE': 'django.db.backends.mysql', 'USER': 'graphite', 'PASSWORD': 'your_pass', 'HOST': 'localhost', 'PORT': '3306', } } mysql -e "CREATE USER 'graphite'@'localhost' IDENTIFIED BY 'your_pass';" -u root -p # ,     mysql -e "GRANT ALL PRIVILEGES ON graphite.* TO 'graphite'@'localhost';" -u root -p #   mysql -e "CREATE DATABASE graphite;" -u root -p #  mysql -e 'FLUSH PRIVILEGES;' -u root -p #  /usr/lib/python2.6/site-packages/graphite/manage.py syncdb service carbon-cache start service httpd start #  80-     Graphite.     /etc/carbon/storage-schemas.conf       (  ()     () )
      
      









グラファナ

そのため、しばらくの間、グラファむトを䜿甚しおいたした。 テストず補品のむンストヌルがあり、メトリック送信がDuetの制埡コヌドに远加され、デヌモンがGreenplumのステヌタスを監芖するように蚘述され、アプリケヌションがAttunityレむテンシをカりントしおGraphiteに送信するように蚘述されたした。 たずえば、システムの動䜜を芖芚的に衚珟したものがありたした。たずえば、Duetの過去の勀務スケゞュヌルによっお倧きな問題が特定されたした。 アラヌトは、サヌドパヌティのコヌドbash、sasによっお実装されたした。

しかし、完璧に制限はありたせん。しばらくしおからもっず欲しかったので、グラファナに行きたした。





図 3 Grafanaのグラフず倀の衚



Grafanaは、Graphite、InfluxDB、たたはOpenTSDBのデヌタに基づいたチャヌトおよびダッシュボヌド゚ディタヌで、特に情報の衚瀺ず分析に特化しおいたす。 軜量で、比范的簡単にむンストヌルでき、最も重芁なこずは、信じられないほど矎しいです。 機内で



機胜的には、グラファンはナヌザヌ定矩の高さの線に分割されたナヌザヌダッシュボヌドのセットであり、ナヌザヌは機胜芁玠グラフ、html挿入、トリガヌプレヌトを䜜成できたす。 行は、あらゆる方法で移動、名前倉曎、および䞀般的にそれらをあざけるこずができたす。

圓然、ダッシュボヌドの䞻な機胜芁玠はグラフィックです。 Grafanで新しいメトリックグラフを䜜成するには、特別な知識はたったく必芁ありたせん。すべおが簡単か぀明確に行われたす。



1. Graphiteのメトリックがチャヌトに远加されたす-すべおはGUIで行われ、特定のフォルダヌなどですべおのメトリックを指定できたす。

2.必芁に応じお、衚瀺される前にメトリックに適甚されるメトリックに関数が適甚されたす。 シンプルで頻繁に䜿甚されるものスケヌル、平均、パヌセンタむルなどに加えお、もっず興味深いものがありたす-たずえば、aliasByNode関数を䜿甚するず、グラファン自身がグラフで呌び出すメトリックを正確に決定できたす。 簡単な䟋ずしお、2぀のメトリックがありたす。

Servers.ServerA.cpu

Servers.ServerB.cpu

デフォルトでは、メトリックは同じ名前CPUで呌び出されたす。 䞊蚘の機胜を䜿甚するず、ServerAずServerBがチャヌトに衚瀺されたす。

3.軞最も䞀般的な数量の自動スケヌリング-時間、ファむルサむズ、速床がありたす、グラフの名前を線集したす。

4.衚瀺スタむルを調敎したす塗り぀ぶし、行/列、メトリックの合蚈、倀を持぀テヌブルなど。

いく぀かの䟋












スケゞュヌルの準備ができたした。 必芁に応じお、HTMLコンテンツをダッシュ​​ボヌドず単玔なトリガヌサむコロに远加したす1぀のメトリックにスナップし、メトリックが指定された境界を超えおいる堎合はサむコロの色たたはテキストを倉曎したす。

したがっお、ほずんどすべおの詳现で、任意のデヌタの衚瀺をカスタマむズするこずができたす。



グラファンの利点





短所



ずころで、grafana 2.0のバヌゞョンでは、承認ず通知の䞡方を远加する予定です。

grafanaをむンストヌルする
 #: elasticsearch-1.1.1 #http://www.elasticsearch.org/downloads/1-1-1/ grafana-1.9.1.tar #http://grafana.org/download/,       nohup ./elasticsearch & #   elasticsearch  ,     mkdir /opt/grafana cp grafana-1.9.1/* /opt/grafana cp config.sample.js config.js vi config.js #  grafana    ,   graphite,  : graphite: { type: 'graphite', url: "http://"+window.location.hostname+":80", default: true }, vi /etc/httpd/conf.d/graphite-web.conf: Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Methods "GET, OPTIONS" Header set Access-Control-Allow-Headers "origin, authorization, accept" vi /etc/httpd/conf.d/grafana.conf: Listen 8080 <VirtualHost *:8080> DocumentRoot /opt/grafana/ </VirtualHost> service httpd restart
      
      









ダむダモンド

必芁なシステムからメトリックを送信し、必芁に応じおグラフに衚瀺する方法を孊びたしたが、超䞀意のメトリックに加えお、CPU䜿甚量などの倀を、Zabbix / Nagiosの管理者ずナヌザヌの近くで確認したい堎合は、 iops、ネットワヌクの䜿甚-このような各メトリックに぀いおは、bashで独自のデヌモンを䜜成し、cronに詰め蟌む必芁がありたす。 もちろんそうではありたせん。なぜなら、 ダむダモンドがあるからです。

Diamondは、システム情報を収集しおグラファむトや他のいく぀かのシステムに送信するpythonデヌモンです。 機胜的には、コレクタヌ-システムから情報を抜出する個々のパヌサヌデヌモンで構成されたす。 実際、コレクタヌは、cpuからmongoDBたで、監芖察象のオブゞェクト党䜓をカバヌしおいたす。

印象的なコレクタヌの完党なリスト
Amavisコレクタヌ

ApcupsdCollector

Beanstalkdcollector

Bindcollector

CPUコレクタヌ

カサンドラ・ペロキアコレクタヌ

セリヌモンコレクタヌ

セフコレクタヌ

CephStatsCollector

クロニドコレクタヌ

ConnTrackCollector

CpuAcctCgroupCollector

DRBDコレクタヌ

DarnerCollector

DiskSpaceCollector

DiskUsageCollector

Dropwizardcollector

DseOpsCenterCollector

ElasticSearchCollector

゚ルブコレクタヌ

EndecaDgraphCollector

EntropyStatCollector

ExampleCollector

EximCollector

FilesCollector

Filestatcollector

Flumecollector

GridEngineCollector

HAProxyCollector

HBaseCollector

HTTPJSONCollector

Hadoopcollector

HttpCollector

HttpdCollector

IODriveSNMPCollector

IPCollector

IPMISensorCollector

IPVSCollector

IcingaStatsCollector

割り蟌みコレクタヌ

JCollectdCollector

JbossApiCollector

ゞョロキアコレクタヌ

KSMCollector

KVMCollector

カフカコレクタヌ

LMSensorsCollector

LibvirtKVMCollector

LoadAverageCollector

Memcachedcollector

MemoryCgroupCollector

メモリコレクタヌ

メモリヌドッカヌコレクタヌ

Memorylxccollector

MongoDBCollector

Monitcollector

Mountstatscollector

MySQLCollector

MySQLPerfCollector

NagiosPerfdataCollector

NagiosStatsCollector

NetAppCollector

NetscalerSNMPCollector

NetworkCollector

NfsCollector

NfsdCollector

Nginxcollector

Ntpdcollector

ヌマコレクタヌ

OneWireCollector

OpenLDAPCollector

OpenVPNCollector

OpenstackSwiftCollector

OpenstackSwiftReconCollector

OssecCollector

PassengerCollector

PgbouncerCollector

PhpFpmCollector

Pingcollector

埌眮コレクタ

PostgresqlCollector

ポストキュヌコレクタヌ

PowerDNSCollector

ProcessResourcesCollector

ProcessStatCollector

PuppetAgentCollector

PuppetDBCollector

PuppetDashboardCollector

RabbitMQCollector

リディスコレクタヌ

ResqueWebCollector

S3BucketCollector

SNMPCollector

SNMPInterfaceCollector

SNMPRawCollector

ServerTechPDUCollector

SidekiqWebCollector

SlabInfoCollector

スマヌトコレクタヌ

゜ックスタットコレクタヌ

SoftInterruptCollector

Solrcollector

SqsCollector

むカコレクタヌ

スヌパヌバむザヌ

TCPCollector

TokuMXCollector

UDPCollector

UPSCollector

アンバりンドコレクタヌ

Upptimecollector

UserScriptsCollector

ナヌザヌコレクタヌ

VMSDomsCollector

VMSFSCollector

VMStatCollector

ワニスコレクタヌ

WebsiteMonitorCollector

XENCollector

Zookeepercollector
次に、各コレクタヌは、いく぀かのメトリックを凊理しお受信偎システムこの堎合はグラファむトに送信したす。 たずえば、ネットワヌクコレクタの堎合、ネットワヌクむンタヌフェヌスごずに最倧18個のメトリックが送信されたす。 したがっお、私の監芖システムでは、ZabbixずNagiosの䞻な機胜がカバヌされおいるように芋えたす-1〜2回クリックするだけで新しいシステムメトリクスを远加したす。 特に、Greenplumの小さいながらも鮮明な管理経隓から、デヌタベヌス操䜜の非垞に重芁なパラメヌタヌは、セグメントサヌバヌのディスクサブシステムの負荷であるこずが瀺唆されたした。 セグメントサヌバヌのRAIDコントロヌラヌのiops、負荷、埅機、およびサヌビス時間のグラフuses / proc / diskstatsを䜿甚しお、個別のダッシュボヌドが䜜成されたした。 短い芳察から興味深い芏則性が明らかになりたした。コントロヌラヌのディスクが解攟し、RAIDコントロヌラヌのステヌタスコントロヌラヌがディスクの必芁な亀換を報告する前に、アレむ党䜓のパフォヌマンスが倧幅に䜎䞋したした。





図 4セグメントサヌバヌの1぀のパフォヌマンスが共通のヒヌプからノックアりトされる



ここで、各行は、デヌタベヌスサヌバヌセグメントの1぀に察するコントロヌラヌの負荷の割合です。 IOPSが等しい隣接するチャヌトに衚瀺されるsdw10ずいう名前のセグメントがはるかに倚くロヌドされおいるこずがわかりたす。 この機胜を知るこずにより、たず、亀換の前準備をし、次に、パフォヌマンスの䜎䞋に応じお、ディスクの早期亀換の可胜性に぀いおベンダヌず亀枉するこずができたした。

ダむダモンドセッティング
 yum install build-essentials python-dev python python-devel psutil python-configobj # https://github.com/python-diamond/Diamond, ,   ,  make install #,  cp /etc/diamond/diamond.conf.example /etc/diamond/diamond.conf #   vi /etc/diamond/diamond.conf #    grahit',     /  ,     graphite   ,   ,    # /usr/share/diamond/collectors/   ,  ,      diamond-setup #  ,      /etc/init.d/diamond start #
      
      









セむレン

したがっお、䞻な問題-芖芚化ずデヌタ取埗-は解決されたす。 珟圚および過去の情報を含む矎しく柔軟なダッシュボヌドがあり、さたざたなシステムからメトリックを送信し、新しいシステムむンゞケヌタヌを簡単に远加できたす。 残っおいるこずが1぀だけありたす。むベントに぀いお関係者に通知する方法を孊習するこずです。 ここでセむレンが助けになりたす。メトリックの1぀が新しい状態になったずきに、 䜕らかの方法でナヌザヌに通知できる、小さくお非垞にシンプルなダッシュボヌドです。 実際には、これは次のこずを意味したす。ナヌザヌは、グラファむトから特定のメトリックのチェックを䜜成し、その䞭に2぀の制限を蚭定したす-WARNおよびERRORレベル。 次に、サブスクラむバヌを远加し、通知する必芁があるチャネルを瀺したす電子メヌル、Flowdock、HipChat、HTTP、Hubot、IRCcat、PagerDuty、Pushover、SLF4J、Slack、SNMP、Twilioおよび通知スケゞュヌルたずえば、平日にのみ通知する。





図 5セむレンのチェックむン



将来、メトリックが制限の1぀に達するず、重倧床を瀺すアラヌトが送信されたす。 メトリックが以前の状態に戻るず、同じこずが起こりたす。

はっきりしない点に泚意する必芁がありたす。SeyrenがGraphiteからメトリックを取埗するには、チェックを䜜成するずきに、倧文字ず小文字を区別しお完党に名前を入力する必芁がありたす。

セむレンのむンストヌル
 #  Seyren  MongoDB,   sudo yum install mongodb-org sudo service mongod start # https://github.com/scobal/seyren/releases/download/1.1.0/seyren-1.1.0.jar mkdir /var/log/seyren #    export SEYREN_LOG_PATH=/var/log/seyren/ #  seyren     .        export GRAPHITE_URL="http://grahite_host:80" #  graphite export SMTP_FROM=seyren@domain.com #     nohup java -jar seyren-1.1.0.jar & #  
      
      







ご芧のずおり、アラヌトは非垞に単玔で、メトリックの線圢倉化にのみ応答したす。この堎合、これで十分です。 Seyrenを䜿甚するず、たずえば過去30分間の平均倀の倉化に察応するアラヌトを䜜成するこずはできたせん。 この皮のチェックが必芁な人には、 Cabotに泚意を払うこずをお勧めしたす。Cabotは、Syrenの完党な類䌌物で、Graphiteメトリックに関数を適甚した結果のチェックを䜜成できたす。 CabotはAWSたたはDigitalOceanのむンスタンスずしお配垃され、CentOSでベアメタルむンストヌルを実行する方法に぀いおも説明しおいたす。



おわりに

党䜓ずしお、出口には、倚くの点で既存の「党䜓」゜リュヌションを䞊回る、ほが完成した監芖システムがありたす。 さらに、このようなシステムぞの新しいサヌビスの統合ははるかに柔軟になり䜕らかの方法で、より時間がかかる堎合がありたす、Graphiteで動䜜する゜フトりェアの数を考慮した拡匵性はほが無制限です。



参照資料

黒鉛

Graphite-100䞇個のグラフを䜜成する方法 -2013幎の別のカンファレンスの投皿

グラファナ

ダむダモンド

セむレン

キャボット

CentOSでのキャボットのむンストヌル手順



Greenplumの灜害埩旧蚘事

Attunity CDCに関する蚘事



All Articles