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での様子である。

f:id:ddtkra:20190131010210p:plain
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を書き連ねていけばグラフの重ね合わせもできる。

f:id:ddtkra:20190131012141p:plain
Grafana上でのグラフの重ね合わせの設定

おわりに

思ったよりMySQLとの連携がよくて非常によかった。

手を動かしながら2週間で学ぶ AWS 受講メモ

 

雑感

あるシステムが存在するとき、サーバとDBを組み合わせて構成するパターンを組み立てられ、かつそのうえで動くアプリ(今回はWebページ)を継続的にバージョンアップしていく仕組みを実習できた。今後は自サイトとしてギャラリー的なものを作って上の2点を実装し運用する感じでAWSをやっていきたい。

 

掴めたもの

  • サーバー・DBLBを組み合わせた高可用性をもつシステムの構築
    VPC, EC2, ELB, AZ, Region)
  • スマートなシステムの権限管理(IAM
  • AWSに構築したインフラのイベント/リソースの監視
  • コードによるシステム構成管理CloudFormation
  • gitリポジトリ->アプリデプロイまでを自動化してくれる継続的インテグレーション
    CodeCommit, CodeDeploy, CodePileline

 

学習の振り返り

  • せっかく朝学習を中心にできたので、夜に復習できるとなおよかった
  • 講義に飽きてきたら無理やり相槌を打つようにしたら、頭を文章がすーっと流れていく感じが少なかったので、今後もやりたい。

 

今後やること

  • インフラデザインパターンをコードに落とし、AWS上に展開する
  • 自サイトをgitで管理し、Deploy, Pipelineでいい感じに持っていく

 

2018年の振り返りととりあえず次の一か月でやること

今年こそ振り返り記事を書こうと思っていたのですが、気が付いたら新年まであと20分というところまで来てしまいました。

以下で振り返りをしましたが、要点が「夏休みの宿題を、来年はいかに計画的にやるか」という一言に集約されてしまいました。

ただ、今回の場合は夏休みは明日から始まるので、何とかやっていくつもりです。

 

 

技術面でやったこと・気づいたこと

  • 競技プログラミング
    • A問題全埋め
  • UdemyAWS講座の受講
    • 5日目で止まっている
  • 運用サービスのマシンリソース使用率の管理
  • Pythonを書き始めた

 

生活

  • Kindle Oasisを買った
  • Surface Proを買った
  • 自宅の環境をアップデートした
    • 全自動洗濯機+ルンバ(偽物)+Alexa操作による部屋のライトとエアコンの自動化
  • イベントに参加した

- ラブライブサンシャイン!! 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マスまでのリストに分ける。

これら二つのリストの長さを比較し、小さいほうが通過する料金所が少なくなるのでオトクになる。