Elasticsearch + Kibanaでサーバのリソース監視

dstatでCPU使用率, メモリ, スワップ, ネットワークI/O, ディスクI/Oなどを取得してfluentdでElasticSearchに投げつけるというものです. それをKibanaで視覚化します. ElasticSearch + Kibana + fluentd + dstatのやり方については他に紹介してるWebサイトがたくさんあるので割愛します. dstatだかfluentdのdstatプラグインの仕様が変わっているだかで, 参考にしたWebサイトの設定ファイルでは動きませんでした. ということで修正した fluentd.conf を紹介します. fluent.conf <source> type config_expander <config> type dstat tag host.dstat.__HOSTNAME__ option -tclmsgr -dD sda,sdb --disk-util -nN eth0 delay 10 </config> </source> <match host.dstat.**> type copy <store> type map map '["map." + tag + ".cpu_usr", time , "cpu_usr" => record["dstat"]["total_cpu_usage"]["usr"]]' </store> <store> type map map '["map." + tag + ".cpu_sys", time , "cpu_sys" => record["dstat"]["total_cpu_usage"]["sys"]]' </store> <store> type map map '["map....

2016/06/26 · 3 分 · 457 文字 · Me

Munin pluginの作り方

SoftEtherの転送量をMuninでグラフ化するため、Munin plugin https://github.com/dozen/softether-plugin を作りました. 今回は Plugin::Munin, Plugin::Munin::Framework を使いましたが, これらのモジュールを使った自作プラグインの作り方について解説しているサイトが全然見つからなかったので, 紹介します. ただし、情報少ないしこのモジュールはMunin v2.1以上じゃないと動かないし, 後述する negative を指定したグラフがたまにうまく描画できなかったりと, 現状だと微妙な感じです. (グラフがうまく描画できてないのは私のコードがおかしいだけかもしれないです) Plugin::Munin::Frameworkについて softether-plugin は Plugin::Munin::Framework というモジュールを使っていますが, これについての詳細はよくわかりません. というのも, このプラグインを書いたのは1年前で, 当時参考にしていたWebサイトが見つからなかったからです. Munin公式のプラグインで使われているようですがとにかくWeb上に情報が載ってないです. munin 2.1.9-1では少なくともMunin公式のプラグインで Munin::Plugin , Munin::Plugin::Framework が使われています. しかし munin 2.0.25 ではそのようなプラグインは使用されておらず, またそれらを使ったプラグインは動きません. CPANにはこの2つのモジュールは無かったので, これらのモジュールを使いたい場合は対応したバージョンのmuninをインストールするしかなさそうです. そんなよくわからないものを使って大丈夫なのかよという感じですが, 動くし, 簡単にプラグインが書けるっぽいのでよしとします. 自作プラグインで実現したいこと プラグインを自作する上で実現したいのは以下の3つです. softether_myhub のようなシンボリックリンクを張るとmyhubのグラフを作ってくれる SoftEtherのホスト名とかHubのパスワードはmunin-node.conf.d/munin-nodeにかける Virtual HUB単位で転送量, パケット数をグラフ化 グラフ化できることはもちろんですが, Muninのプラグインらしく, シンボリックリンクで監視対象のデバイスを指定したり, munin-node.conf.d/munin-node に書いたconfigが読めるようにしたいです. プラグインの作成 softether-muninのソースコードを使って解説していきます. シンボリックリンク名でVirtual Hubを指定 Muninのプラグインでありがちな, 実体が if_ というファイルで if_eth0 というシンボリックリンクを張るとeth0についてのグラフを作成する, というのを真似したい. プラグイン softether_ のシンボリックリンク名を読み取る部分はこうなります....

2016/06/25 · 3 分 · 605 文字 · Me

Base128を作りました (Golang)

Base128とは 英数字(a-z, A-Z, 0-9)とひらがな(あ-ん)の128文字を使ってバイト列をエンコードするものです. 実用性はともかく,文字数はBase64より少なくなるというメリットがあります. デメリットは,エンコード後のデータ量がものすごく増えることと,あらかじめエンコード後/デコード後のデータ量がわからない点です. https://github.com/dozen/encoding 使い方 import import "github.com/dozen/encoding/base128" encode e := base128.NewEncoding(base128.StdEncoding) e.EncodeToString([]byte("Hello, world!")) //=>kZtけふ8ぢg7どぺmふQお decode e := base128.NewEncoding(base128.StdEncoding) fmt.Printf("%s\n", e.Decode("kZtけふ8ぢg7どぺmふQお")) //=>Hello, world! 実装 Base64を参考にして作り始めたのですがとりあえず動くようにしようとあれこれしている間に全く別物になってしまいました. Base64の場合,64文字を用いるので6bitを表現できます.エンコード時には,元の8bitのバイト列を6bitに区切るために,4byteずつuintに格納してから6bitずつビットシフトしています。 val := uint(src[si+0])<<16 | uint(src[si+1])<<8 | uint(src[si+2]) dst[di+0] = enc.encode[val>>18&0x3F] dst[di+1] = enc.encode[val>>12&0x3F] dst[di+2] = enc.encode[val>>6&0x3F] dst[di+3] = enc.encode[val&0x3F] こんなかんじです.encoding/base64/base64.goの100行目ぐらいのところです. これを参考にして,元の8bitのバイト列を7byteずつ取り出し,7bitずつ区切ることにしました.7byte=56bitなのでuintには収まる範囲です. val := uint(src[si+0])<<48 | uint(src[si+1])<<40 | uint(src[si+2])<<32 | uint(src[si+3])<<24 | uint(src[si+4])<<16 | uint(src[si+5])<<8 | uint(src[si+6]) dst[di+0] = enc.encode[val>>49&0x7F] dst[di+1] = enc....

2016/06/05 · 1 分 · 95 文字 · Me

InkPaperでブログを生成して, Github Pagesで公開する

2024/05/28 追記: 現在はInkPaperを使っていません。また、昔の記事なので正しくない可能性があります。 InkPaperとは? 使い方は? Go言語で書かれた静的ブログジェネレータです。HugoとかJekyllとかの静的サイトジェネレータのブログ特化版みたいな感じです。 InkPaper は最初からブログ用に作ってあるので、面倒な設定とかしないでとりあえずブログを書き始めることができます。 使い方は InkPaperのREADME に書いてあるのでここを参照します. InkPaperをインストール http://www.inkpaper.io/から自分の環境に合ったものをダウンロードします. zipファイルを解凍すればインストールは完了です. 設定ファイルを編集する blog/config.ymlを編集します. site: title: ジェット・ゾウ #ブログのタイトル subtitle: サブタイトル #タイトルの下にチョロンと表示されます # logo: -/images/avatar.jpg #トップページに表示される自分のアイコン limit: 10 theme: theme disqus: somebody lang: en url: http://jetzou.com/ # root: /blog authors: me: name: dozen intro: どぜんと読みます avatar: -/images/avatar.jpg build: port: 8000 # Copied files to public folder when build copy: - theme/bundle - theme/favicon.ico - theme/robots.txt - source/images # Excuted command when use 'ink publish' publish: | git add . -A git commit -m "update" git push origin urlとrootだけ気をつければあとは適当で大丈夫. 今回はhttp://jetzou.com/で公開したいのでurl: http://jetzou.com/"としました. disqusはコメント機能を提供してくれるDISQUSのアカウントを指定するんですが, 今回はスキップ. langは今のところ中国語と英語にしか対応していないみたいなので, enを指定しました. 設定ファイルはこんな感じで大丈夫そうです. 記事を書く 記事を置く場所はblog/sourceです. インストールした状態ではサンプルページのblog/source/ink-blog-tool-en.mdとblog/source/ink-blog-tool.mdがあります. 記事を書くまえにこのファイルをみて, 参考にするといいです. 公開する前にこの2つのファイルは消しておきます. ...

2016/06/05 · 2 分 · 423 文字 · Me