ELK Stackでシステム監視 KibanaのSearchで抽出条件を作成する

前々回、監視対象ホストに仕掛けたcollectdで情報を収集してlogstashに送るのをやった。
今回はそのcollectdでNginxの情報を収集してウェブサーバの(ネットワーク的)使用状況をkibanaでデータ抽出する。(ついでにホストのロードアベレージも)

魔法じゃないので何のしかけも無しにcollectdがNginxの使用状況を取得するということはできない。collectdがNginxのステータス情報を見るための設定を追加する。ということはNginxでステータス情報を出してやるというのも必要。
以下、Nginxとcollectdの設定やコマンドはFreeBSD用に書く。

Nginxの設定

/usr/local/etc/nginx/nginx.conf
1
2
3
4
5
#前略
http {
#中略
        include /usr/local/etc/nginx/vhosts/*.conf;
}

/usr/local/etc/nginx/vhostsにnginxのバーチャルホストの設定を置くとする。
そこで/usr/local/etc/nginx/vhosts/にある.conf設定ファイルをインクルードする設定を追加。

/usr/local/etc/nginx/vhosts/localhost.conf
1
2
3
4
5
6
7
server {
    listen 127.0.0.1:80;
    location /ngstat {
        stub_status on;
        access_log off;
    }
}

Nginxのバーチャルホストの1つとして127.0.0.1:80で待ち受けるものを作成する。
その/ngstatにアクセスすることでNginxのステータスを取得する。
なので、Nginxのhttp_stub_statusモジュールが使える状態でないと当然動かない。
ローカルホスト専用なのでアクセス制限は考えなくてOK.

collectdの設定

/usr/local/etc/collectd.conf (既存の設定に追加)
1
2
3
4
LoadPlugin nginx
<Plugin "nginx">
    URL "http://127.0.0.1/ngstat"
</Plugin>

Nginxプラグインの設定を追加。Nginxのステータスを取得するためのURLとして先に設定したバーチャルホストのURLを書く。

Nginxとcollectdを再起動(再読み込み)

# service nginx reload
# service collectd restart

Nginxは再起動ではなく設定の再読み込みをする。collectdは普通に再起動。

Nginxのステータスが出力されていることを確認しておく。

% wget -q -O - http://127.0.0.1/ngstat
Active connections: 9
server accepts handled requests
 12218 12218 26536
Reading: 0 Writing: 1 Waiting: 8
%

こんな感じで出力される。

collectdでNginxのステータス情報を受信できていることを確認する。方法はcollectdの設定の記事を参照。

これでNginxのステータス情報がcollectd経由でlogstashに集められてelasticserchデータベースに流れ込むようになった。
ここからが本題。

KibanaのSearchで抽出条件を作成する

KibanaのSearchで情報を見る 1
画面1:
kibanaにアクセスし、左列のメニューからDiscoverをクリック。

Discoverを表示するときは最低でもブラウザの幅を1000px以上にしないと欲しい情報が見えなくて使いづらいのでできるだけブラウザの窓を拡げること。

Discoverの初期値はLast 15 minutesのようなので直近15分のlogstash-*の全データが表示される筈。
フィールド名のリストの項目は表示されているデータ(抽出されているデータ)に含まれる分だけなので、存在する筈なのに表示されないと言う場合は抽出の仕方を変えるなどしなければならない。
右列はデータソース。

KibanaのSearchで情報を見る 2
画面2:
データの絞り込みを行う。特に決まりはない筈だか欲しいデータが得られるように抽出条件を追加する。
今回は先ず特定のホストだけを抽出させたい。
フィールド名のリストで[host]を押すと抽出範囲に含まれるホストのリストが表示される。
その中から「抽出したい」ホストを探し、ホスト名の右側の(抽出の追加)を押す。

KibanaのSearchで情報を見る 3
画面3:
上部に抽出中の項目が表示されるようになった。
右列のデータソースも抽出したホストのデータだけになっている筈。
フィールド名リストの[host]の項目も抽出対象として選んだホストだけが表示されている。
さらに絞り込むため、[collectd_type]を押す。
collectd_typeに含まれる項目が表示される。(ここで注意としては項目名が多いと全てが表示されるとは限らないこと)
今回はNginxの接続ステータスに絞りたいと思うのでnginx_connectionsの右側の(抽出の追加)を押す。
ちなみにその下のconnectionsもNginxのステータス情報の一部。(今回は用は無し)

KibanaのSearchで情報を見る 4
画面4:
上部の抽出中の項目の表示が増えた。
フィールド名リストの[collectd_type]がnginx_connectionsだけになった。
試しにデータソースの中の1つを開いてみる。Time列の時間の左側の(右向き三角)を押すとそのデータソースが展開される。
type_instanceがwaitingになっている。こういうのは他の種類のtype_instanceがある筈。

KibanaのSearchで情報を見る 5
画面5:
フィールド名のリストから[type_inctance]を押す。
4種類のtype_instanceが見えている。(抽出した時間内に含まれるものだけなのでこれが全種類とは限らないし全種類かもしれない)
今回はwritingに絞りたいと思うのでwritingの右側の(抽出の追加)を押す。

KibanaのSearchで情報を見る 6
画面6:
上部の抽出中の項目の表示が増えた。
取り敢えずこの抽出条件を保存したい。画面上部の[Save]を押す。

KibanaのSearchで情報を見る 7
画面7:
わかりやすい名前を付けて[Save]を押す。
(個人的には抽出条件を並べた名前を付けるようにしている)

KibanaのSearchで情報を見る 8
画面8:
上の画面5でtype_instanceをwritingで抽出したが、type_instanceの別のものも抽出したい。
そこで上部で現在抽出中の項目でtype_instance:"writing""になっている部分にマウスカーソルを合わせる。
幾つかアイコンが表示されるので(ゴミ箱)をクリック。

抽出状態としては画面5の状態になる。
今回はactiveに絞りたいと思うのでactiveの右側の(抽出の追加)を押す。

KibanaのSearchで情報を見る 9
画面9:
現在抽出中の項目にtype_instance:"active"が追加される。この抽出条件を保存したいので最上部の[Save]を押す。
新しい名前を付け、Save as a new searchにチェックして[Save]を押す。このときSave as a new searchにチェックしないと画面6,7で保存した抽出条件が新しく指定した名前に変更になって上書き保存されてしまう。

KibanaのSearchで情報を見る 10
画面10:
今度はロードアベレージ。
特定のホストに絞って、collectd_typeにloadを指定して更に絞った。
データソースを見るとlongterm, midterm, shorttermという項目にそれぞれ値が入っている。(こういうのは直感的に分かりやすくてある意味ありがたいがデータとしては汚い)
同じく名前を付けてこの条件で保存する。
(次回Visualizeで使う)

KibanaのSearchで情報を見る 11
画面11:
ここまで抽出条件を作って保存したが、それの管理は左列メニューのManagementで行う。
左列の Managementをクリック。
Management画面で「Saved Object」をクリック。

KibanaのSearchで情報を見る 12
画面12:
上部のタブがSaved Objectであること(赤色の破線四角部分)を確認してその少し下のタブから[Searches]をクリックする。
保存した抽出条件がリスト表示されるので、削除したい条件があればその条件の名前の左にあるチェックボックスにチェックして[Delete]ボタンを押す。

次は今回作成した抽出条件からVisualizeでグラフを作成する。

関連記事:

Googleの仮想キーボード Gboard

Androidでの文字入力はAndroid2.0か2.1の時代からATOK(有料版)を使ってた。表示されるキーの大きさや配列がまあまあ気に入ってたのとすっきり画面だったのと変換候補が滅茶苦茶ではなかったから。それと、Googleの日本語入力のキー配列が好きじゃなかったから。
と、思ったらそのGoogle日本語入力がいつのまにかGboardなるキーボードに切り替わった?ので遅ればせながら2018年に入ってから試しでちょこちょこ使ってたら入力の反応の良さからすっかりお気に入りになってしまった。またしてもGoogle様の思う壺。

ただし、インストール後に少しだけ触っておかないと気持ち良く使えないので備忘録。

Gboardアプリをインストールしたところから。

Gboardの設定 1
画面1:
Androidの設定画面から「システム」に進む。
「言語と入力」を選択する。

Gboardの設定 2
画面2:
「仮想キーボード」を選択する。

Gboardの設定 3
画面3:
まだGboardを使用可能にしていないので選択肢に出ていない筈。
「+ キーボードを管理」を選択する。

Gboardの設定 4
画面4:
画面操作で入力するタイプの仮想キーボードが最低1つは有効でないとならないのでいきなり既存の仮想キーボードをオフにすることはできない筈。
そこで先にGboardをオンにしてからその他の画面操作入力タイプの仮想キーボードをオフにする。(切替えて使いたいならオフにしなくても良い)

Gboardの設定 5
画面5:
こうなればOK.
Androidの設定画面を閉じる。

Gboardの設定 6
画面6:
ブラウザでもその他アプリでも何か文字を入力する状態にしてキーボードを表示する。
おそらく日本語のフリック入力画面が表示される筈。
左下隅の「あa」を押すと英数字入力画面に切り替わる。

Gboardの設定 7
画面7:
まことに使い難い英数のフリック入力画面。こんなん絶対無理。
左下隅の「あa」を押すと日本語の入力画面に戻る。(またはこの画面で「あa」を長押ししても次の画面と同様)

Gboardの設定 8
画面8:
日本語入力画面で左下隅の「あa」を長押しすると(設定)アイコンが表示されるのでそれを選択する。

Gboardの設定 9
画面9:
「言語」を選択する。

Gboardの設定 10
画面10:
ここで、「日本語」しか表示されない場合は下の「キーボードを追加」を押す。(画面11へ)
「日本語」と「英語(米国)」が表示される場合はキーボード(の言語)追加は不要。(画面15へ)

Gboardの設定 11
画面11:
キーボードの言語リストでスクロールしない状態で「英語(米国)」があるならそれを押す。(画面14へ)
スクロールしない状態では「英語(米国)」が見えないならだいぶ下の方までスクロールする。(画面12へ)

Gboardの設定 12
画面12:
言語リストから「英語」を探して押す。

Gboardの設定 13
画面13:
英語圏の国リストが表示されるので「英語(米国)」を押す。(1番下あたり)
どうしても米国が嫌だというなら他の国でも良い。

Gboardの設定 14
画面14:
英語配列のキーボードが複数表示されるので慣れてるタイプを選択する。普通は「QWERTY」あたり。タブレットなどの大きい画面の端末だと「PC」という選択肢もアリかもしれない。
その他はマイナーな配列(個人的には使ってる人を見たことない)。QWERTZ配列はドイツ語圏のキーボード、AZERTY配列はフランス語圏のキーボード、Dvorak配列は英語入力の最適化マニア向けキーボード配列、Colemak配列も英語の入力に適した配列の一つ。これまで愛用してたということでなければ今後も死ぬまで関わらないべき。
選んだら[追加]を押す。

Gboardの設定 15
画面15:
これで日本語と英語(米国)が登録された状態となった。リストの右のを押しながら上下にドラッグするとキーボードの言語の優先順位を入れ替えることができる。

Gboardの設定 16
画面16:
キーボードを表示させて(地球アイコンの別タイプ)を押すと言語が切り替わる。日本語英語
これだと「Google日本語入力」の英語配列と同じく数字の入力がし難くて気に入らない。

Gboardの設定 17
画面17:
QWERTY配列の画面ではを長押しすると(設定)アイコンが表示されるのでそれを押す。

Gboardの設定 18
画面18:
「Gboardキーボードの設定」を選択する。

Gboardの設定 19
画面19:
「設定」を押す。

Gboardの設定 20
画面20:
「数字行」をオンにする。

Gboardの設定 21
画面21:
QWERTY配列の入力画面を表示させると1段増えて数字を直接押せるようになった。これならATOKからの移行が楽。
ちなみに、記号の入力は左下隅の[?123]を押す。

Gboardの設定 22
画面22:
記号入力画面では左下隅の[ABC]でQWERTY配列に表示切替えとスペースキーの左隣の[1234]で数字のダイヤルパッド風に切替えられる。

Gboardの設定 23
画面23:
Gboardで最大の謎な数字配列。数字は電卓とは逆で電話と同じ並び、でも電話できるわけじゃない。数字以外は計算に使いそうな記号が並ぶけど計算ができるわけじゃない。何がしたいんだろう。

Gboardの設定 24
画面24:
その他やっておきたい設定変更。
設定画面(画面17,18,19で開く)で「テキストの修正」を選ぶ。
「修正」の項目3つはアルファベット入力が標準の国の人にはありがたいかもしれないけど日本人的には余計なお世話な機能なのでオフにするのが無難。

Gboardの設定 25
画面25:
設定画面(画面17,18,19で開く)で「グライド入力」を選ぶ。
グライド入力はQWERTY配列などで英文入力するときに使える入力方法で、普通はボタンを押すようにキーをポチポチ押して入力するけど、指を離すという動作を無くして指をスライドさせて押したいキーからキーへ辿っていく入力方法。Androidのロック解除のパターン入力みたいなのを連想すれば近いかと。個人的にはたぶん慣れないだろうから余計な機能と判断。グライド入力関係の設定を全てオフにする。

Gboardの設定 26
画面26:
設定画面(画面17,18,19で開く)で「詳細設定」を選ぶ。
個人的にはGoogleに勝手に入力内容を送られるのは気に食わないので「気休め」だと思いつつもGoogleへの情報送信機能をオフにする。

ATOKと比べると間違いなく入力感度が高い、入力する指の位置に正しく反応する、言葉狩りによる「候補が出ない問題」が無いという点で変なストレスは減ったと思う。ただ、これまで長年ATOKに指が慣れ親しんでるので日本語とQWERTY配列の切り替えボタンの場所が違うことが新たなストレスの元になってる。まぁ、慣れの問題なんだけど。

あと、ときどきキーボードのボタンが表示されなくなる(手書きモードでもないのにキーボードのボタンが表示される筈のエリアが真っ白になって入力もできない)バグだけ早めに直して欲しいかな。

Up