zabbixの情報を集計したものをGrafanaで確認する
なんでそんなことするの?
割と大きなシステムでは、リソース情報や統計情報を蓄積する際にもデータ量が膨大。
そして対策というか以下のような整理をすることになると思う。
[対策 or 整理]
1. 何もしない。(=集計クエリを投げて2時間ひたすら待つ。しかも長期間になるほど実行時間は長くなる)
2. 直近のデータだけzabbixに載せて、過去データはsplunkなどに回して確認する。
ここでシステムを運用する上で、とりあえずリソース情報だけでも以下の2点は押さえておきたい。
[要望]
1. 直近のリソースの変化(異常有無)
2. 長期のリソース傾向
要望1,2は対策1,2でそれぞれ確認することはできる。
ただし、問題1)zabbixもsplunkも大量のホストを確認するとなると最悪レベルにだるい。
すべてを一画面(スクロールはあり)で確認したくなる。
また、そのリソースが正常かを確認する方法として、「先週の同時間帯のリソースと
比較してどうか?」などが見たくなる。
このような場合、zabbixやsplunkでは、問題2)柔軟にグラフの表示を設定できない。
※もし出来るたらすみません。ただし対策2で上げたように、比較するデータは大体すでにzabbixにない
上記の問題1,2はGrafanaというツールを導入+集計データを別のデータベースにもつことで解決できる(予定)。 以下はGrafanaでの様子である。
上記ではわかりにくいが、問題1)を解決し、大量のリソースグラフを一覧で出すことができている。
※上記の図では、グラフが1つ(CPU使用率のみ)だが、ここにメモリ使用率等のグラフが並ぶイメージ
また、問題2)も、Grafanaに表示するデータはSQLで自在に指定できるので解決している。
下記では備忘録として、導入手順を記載する。
Grafana周りのトポロジー
※TODO:後で記載。AWS上でWebサーバ(Grafana)⇔RDS(mysql)の単純な構成。
導入手順
Grafanaの導入(Webサーバ:)
下記ブログの「ユーザー設定をする」まで実施
blog.serverworks.co.jp
集計用DBの準備(RDS, mysql)
mysqlにはWebサーバ上から遠隔でログイン
[ec2-user@udemy-aws-14days-web-1a ~]$ mysql -u xxxxx -p -h xxxxxxx.xxxxxxx.ap-northeast-1.rds.amazonaws. com Enter password: mysql> mysql> create database resource; : mysql> select *,from_unixtime(time_sec) from calc_resource; +------------+----------+----------+-------+-------------------------+ | time_sec | hostname | metric | value | from_unixtime(time_sec) | +------------+----------+----------+-------+-------------------------+ | 1546365600 | host1 | CPU Util | 20.00 | 2019-01-01 18:00:00 | | 1546452000 | host1 | CPU Util | 22.00 | 2019-01-02 18:00:00 | | 1546538400 | host1 | CPU Util | 25.00 | 2019-01-03 18:00:00 | | 1546624800 | host1 | CPU Util | 26.00 | 2019-01-04 18:00:00 | | 1546711200 | host1 | CPU Util | 27.00 | 2019-01-05 18:00:00 | | 1546797600 | host1 | CPU Util | 29.00 | 2019-01-06 18:00:00 | | 1546884000 | host1 | CPU Util | 25.00 | 2019-01-07 18:00:00 | | 1547056800 | host1 | CPU Util | 35.00 | 2019-01-09 18:00:00 | | 1547143200 | host1 | CPU Util | 50.00 | 2019-01-10 18:00:00 | | 1547229600 | host1 | CPU Util | 51.00 | 2019-01-11 18:00:00 | | 1547316000 | host1 | CPU Util | 52.00 | 2019-01-12 18:00:00 | | 1547402400 | host1 | CPU Util | 53.00 | 2019-01-13 18:00:00 | | 1547488800 | host1 | CPU Util | 53.00 | 2019-01-14 18:00:00 | | 1154636560 | host2 | CPU Util | 53.00 | 2006-08-03 20:22:40 | | 1546452000 | host2 | CPU Util | 53.00 | 2019-01-02 18:00:00 | | 1546538400 | host2 | CPU Util | 53.00 | 2019-01-03 18:00:00 | | 1546624800 | host2 | CPU Util | 53.00 | 2019-01-04 18:00:00 | | 1546711200 | host2 | CPU Util | 53.00 | 2019-01-05 18:00:00 | | 1546797600 | host2 | CPU Util | 53.00 | 2019-01-06 18:00:00 | | 1546884000 | host2 | CPU Util | 53.00 | 2019-01-07 18:00:00 | | 1547056800 | host2 | CPU Util | 53.00 | 2019-01-09 18:00:00 | | 1547143200 | host2 | CPU Util | 53.00 | 2019-01-10 18:00:00 | | 1547229600 | host2 | CPU Util | 53.00 | 2019-01-11 18:00:00 | | 1547316000 | host2 | CPU Util | 53.00 | 2019-01-12 18:00:00 | | 1547402400 | host2 | CPU Util | 53.00 | 2019-01-13 18:00:00 | | 1547488800 | host2 | CPU Util | 53.00 | 2019-01-14 18:00:00 | +------------+----------+----------+-------+-------------------------+ 26 rows in set (0.00 sec)
Grafanaでの連携
下記ページの「Grafanaのインストール」のインストール部分以降を参考に実施
MySQLのデータをGrafanaでグラフィカルに表示してみた | スマートスタイル TECH BLOG
下記の図の下方のようにSQLを書き連ねていけばグラフの重ね合わせもできる。
おわりに
思ったよりMySQLとの連携がよくて非常によかった。
手を動かしながら2週間で学ぶ AWS 受講メモ
雑感
あるシステムが存在するとき、サーバとDBを組み合わせて構成するパターンを組み立てられ、かつそのうえで動くアプリ(今回はWebページ)を継続的にバージョンアップしていく仕組みを実習できた。今後は自サイトとしてギャラリー的なものを作って上の2点を実装し運用する感じでAWSをやっていきたい。
掴めたもの
- サーバー・DB・LBを組み合わせた高可用性をもつシステムの構築
(VPC, EC2, ELB, AZ, Region) - スマートなシステムの権限管理(IAM)
- AWSに構築したインフラのイベント/リソースの監視
- コードによるシステム構成管理(CloudFormation)
- gitリポジトリ->アプリデプロイまでを自動化してくれる継続的インテグレーション
(CodeCommit, CodeDeploy, CodePileline)
学習の振り返り
- せっかく朝学習を中心にできたので、夜に復習できるとなおよかった
- 講義に飽きてきたら無理やり相槌を打つようにしたら、頭を文章がすーっと流れていく感じが少なかったので、今後もやりたい。
今後やること
2018年の振り返りととりあえず次の一か月でやること
今年こそ振り返り記事を書こうと思っていたのですが、気が付いたら新年まであと20分というところまで来てしまいました。
以下で振り返りをしましたが、要点が「夏休みの宿題を、来年はいかに計画的にやるか」という一言に集約されてしまいました。
ただ、今回の場合は夏休みは明日から始まるので、何とかやっていくつもりです。
技術面でやったこと・気づいたこと
生活
- ラブライブ!サンシャイン!! Aqours 4th LoveLive! ~Sailing to the Sunshine~
- せっかく痩せた体重が増えてしまった。72kg->75kg
- マシュマロを我慢しなかった
- コンビニでのついで買い
- Kindle書籍の割引買い
今年の所感
- 手に付けるまでのフットワークが遅い。
- いろいろなものに手を付けることができた。一方で、それぞれ習熟、というか道具として使いこなすにどれも至れなかった。
- 技術・知識でやったことがCSとその近くの分野に偏ってしまった。
来年はどうするか
- 自己管理の経験積み
- マシュマロを我慢する。デビッドカードへの切り替え
- 1月先の計画を立てる。
- 新しいことへの飛び込むチカラ
- 抵抗をなくす
- 講義の単位などの一定の基準までやりきるを繰り返す
具体的には?
とりあえずは以下をやろうと思います。
- AWSの講座を修了する。
- デビッドカードに切り替える。
- 会社の持ち株会で強制的に貯金する。
タイトルを変更しました。
工房って響きがかっこいい。
せっかく工房なので何か作れるといいな。
あと、真夜中ってことばも使いたい。澄んでいる。
好きなことばを二つ合わせれば最強だと思います。
AtCoder Beginner Contest 103
A - Task Scheduling Problem
例をつくって、列挙した。
昇順か降順にソートして計算すればうまくいくような気がする。
ミソは(おそらく)要素 ai 間の差をなくすこと。
B - String Rotation
popしてinsertで付け替えて回した。
入力:str -> list -> strという変換をしたが、listからstrにするのにjoinを使わなければいけないことに手間取った。str(list:s)でいけると思ってた。
C - Modulo Summation
とりあえず a = [1,2,3] で m = 6で一周期っぽかったので、a = [2,3,5] でもう一例作ってみた。m=30まで作った。そしたらm=29で最大値が来てて、a = [1,2,3]のほうでも m=5 で最大値がきてたので、f(lcm(a)-1)で通った。
蛇足だが素直に公式の例を使えば m=10まででよかった。
あとlcmの実装にmath.gcdを使おうとしたが、REが出てうーんうーん?言ってた。理由はmath.gcdは Python3.5 からで、それ以前はfraction.gcdのためであった。
functools.reduceというメチャいいものの存在を知った。
D - Islands War
時間切れで見ていない。まあまだいいかな。
ABC B問題 #092,#093,#094
開催回の前に#を入れるとなんか良い。
あと文字に起こすのは早めにするべきだと思った。
今回の3問は最近疲労がたまっていたせいか解くのに時間がかかった。疲労を抜くのは大事。
#092 B. Chocolate
各参加者のチョコレートを消費する日のリストをつくって、
最後に全部の参加者リストの長さ(結果的にその参加者が食べるチョコの数になる)とあまったチョコの数を合計した。
#093 B. Small and Large Integers
基本的な考え方はrange(a,k,1)とrange(b,b-k,-1)のsetをとればよいが
b < a+k や a > b-k の場合を組み込む必要がある。
ので、
set (range(a,min(b+1,a+k)) + range(b, max(a-1, b-k, -1))
をとる必要がある。
max,minの中の第一引数に+1と-1を追加するのは、上記特殊ケースの場合、rangeがb,aそのものを含まないため。
#094 B. Toll Gates
初期はXのマスにいるので、料金所のマスを格納したリストを0からXマスの左隣りのマスまでのリストと、X+1マスからN+1マスまでのリストに分ける。
これら二つのリストの長さを比較し、小さいほうが通過する料金所が少なくなるのでオトクになる。