誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

2. データ型の違い(文字タイプ)

監視データを格納するデータタイプは、大別すると数字型と文字型があります。数字の方は整数型と小数型でわかり易いのですが、文字の方は、文字列ログテキストの3種類があり、ちょっと違いがわかりづらいです。

使い始めた頃は、(なんとなく)一番上にある 文字列をそのまま選択したりしていました。この3つのデータタイプの違いを最初にきちんと把握しておいたほうが、アイテム作成時にモヤモヤしなくてすみます。

文字タイプの違い

アイテム登録時のデータ型のプルダウンには、以下のような選択肢が表示されます。

f:id:Unam:20180115211256p:plain

Zabbixのマニュアルに、それぞれのタイプは以下のように記述されています。 (日本語訳のある2.2のマニュアルを引用させていただきました。)

f:id:Unam:20180115211459p:plain
https://www.zabbix.com/documentation/2.2/jp/manual/config/items/item

上記の説明でわかったような気もしますが、いろいろと疑問も残ります。ログはZabbixAgentのアクティブでしか使われないのか?、テキストの制限がないというのは本当か??、等々。これは日本語訳の問題ではなく、原本の英語版の問題です。

最新の3.4のマニュアルは、まだ英語版しかないですが、内容がもう少しわかりやすくなっています。

f:id:Unam:20180115212440p:plain
https://www.zabbix.com/documentation/3.4/manual/config/items/item

文字 短いテキスト
ログ タイムスタンプや重要などの属性を持った長いテキスト
テキスト 長いテキスト

とりあえず、3つの違いが以前よりわかりやすくなっていました。ログのところは「独立した付加属性を持ったテキスト」という実態を、より適切に表す説明になっています。あと、気になるデータの長さは、同じページの下側に別途説明があります。

f:id:Unam:20180115213117p:plain (引用元は上記の3.4マニュアルと同じ)

これで、3つの違いはある程度把握できたと思います。

「長い」データを格納する

ZabbixAgentでテキストを読み込む簡単なキー(Userparameter)をつくり、256バイトを超えるテキストを取得した場合の見え方を確認します。

以下のユーザパラメタを記載したファイルを作成し、zabbix-agentをリスタートします。

$ /etc/zabbix/zabbix_agentd.d
$ sudo vi userparameter_test.conf

(以下の行を記述)
UserParameter=test.text[*],cat /tmp/textdata

$ sudo service zabbix-agent restart


取得するテストデータのサイズと内容は以下のとおりです。 curlでWebサイトにアクセスした際の結果を格納したファイルです。サイズは255バイト以上で、改行コードありのテキストです。

$ ls -l /tmp/textdata
-rw-rw-r-- 1 appliance appliance 480 Jan 15 21:42 /tmp/textdata

$ cat /tmp/textdata
*   Trying 128.199.109.89...
* Connected to api.openweathermap.org (128.199.109.89) port 80 (#0)
> Host: api.openweathermap.org
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: openresty
< Date: Sat, 13 Jan 2018 11:10:49 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 8379
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Methods: GET, POST
<
{ [8163 bytes data]

これをそれぞれのデータタイプで読むと、以下のようになります。

文字列

文字列タイプの定義です。作成したtext.text[]というキーは、引数に関係なく同じ値を返すので何も入れなくてもよいのですが、Zabbixは同じホスト内に同じキーを持つアイテムを重複して持つことはできないので、識別子代わりに引数欄を使っています。
f:id:Unam:20180115215018p:plain

取得結果
f:id:Unam:20180115215326p:plain

データは途中で切れますが、制限を越えるデータを受信してもエラーになることはないです。改行もそのまま表示されます。

MySQLの場合は、255バイトではなく255文字までです。日本語も、255文字表示可能です(以下の例は、改行コードの分、文字数が減ってますが)。 f:id:Unam:20180116061008p:plain

テキスト

テキスト型では、データが切れることなく格納可能です。 f:id:Unam:20180115215717p:plain

ログ

最後にログですが、これもテキスト同様にデータが格納できます。ログやイベントの格納するための属性データを持っていますが、ただテキストを入れても問題はない、ということがわかります(特定の監視タイプやキーに結びついているわけではない、ということです。)

テキストと違い、ローカル時間という欄があります。これは上記のマニュアルに記載されていた付加属性の一部です。ログデータの監視方法は別途説明する記事を記載する予定です。 f:id:Unam:20180115215516p:plain

最後に

文字列系のデータは、かなりの長さの文字列が格納できますが、データベース内に格納されることを意識して監視間隔や保存期間の設定を行ってください。

システムや機種の情報を5分間隔で取得していたりするとあっという間にテーブルのサイズが膨らみます。

MySQLの場合は、Housekeepingでレコードを消去してもデータファイルのサイズは減らないので、特に運用上注意が必要です。