バージョン1.8系でのナノ秒対応について
いつもお世話になっております。
Zabbix1.8-15を使用しておりますが、1.8系ではアクション通知の際のメッセージ精度が秒単位だったと思います。
1秒間に複数のエラーログなどが出力された場合には、メール通知内容が不正確な場面が最近多々起きるようになりました。
ほとんどがアプリ系のログなのですが、アプリの改修は難しい状況です。
バージョン2.0では改善されナノ秒に対応しているのはフォーラム等で把握しておりますが、バージョンアップは今のところ考えておりません。
1.8系でナノ秒対応のパッチ等提供されているサイトなどご存知な方がいらっしゃいましたらご教授下さい。
よろしくお願い致します。
fripper - 投稿数: 495
データを報告する agent 側、データを受け取って格納する server 側、
ともにナノ秒情報をやりとりできるように、正しく扱えるように‥と
大規模なパッチになってしまうと思います
また、DB に保存されるヒストリ情報等にも、それぞれナノ秒情報を
保管する追加カラムが必要となるなど、とても「パッチ」とは
呼べない規模のシロモノに感じます
‥残念ながら、1.8 系に対して、それほどの改修を含むパッチを
公開されている方は存じ上げません
ただ、ほぼ間違いなく言えるのは、server側・agent側の全モジュールが
入替必要となるだろう、ということと、DBの拡張・カスタマイズ等が必要に
なるだろう、ということです
これらからすると‥2.0 系もしくは2.2系に変えてしまうのも同等の手間だと
感じてしまいますが‥いかがでしょうか
かかし - 投稿数: 52
早速の返信ありがとうございます。
。。。なるほど。。確かに大規模は改修が必要そうですね。
残念ながら一旦、あきらめ運用回避とします。
ありがとうございました。
KAZ - 投稿数: 1085
かかしさん
1.8系のナノ秒対応パッチは聞いたことありません。A(^^;
以下、fripperさんの補足になります。
上が1.8系のhistoryテーブルで下が2.2系のhistoryテーブルです。
2.2系にnsと言うカラムが追加されてます。ここにナノ秒が格納されます。
CREATE TABLE history (
itemid bigint unsigned DEFAULT '0' NOT NULL,
clock integer DEFAULT '0' NOT NULL,
value double(16,4) DEFAULT '0.0000' NOT NULL
) ENGINE=InnoDB;
CREATE TABLE `history` (
`itemid` bigint unsigned NOT NULL,
`clock` integer DEFAULT '0' NOT NULL,
`value` double(16,4) DEFAULT '0.0000' NOT NULL,
`ns` integer DEFAULT '0' NOT NULL
) ENGINE=InnoDB;
データ格納するテーブルにはns追加されていると思ってください。
2.2.1では以下のテーブルにカラムnsが存在します。
history
history_sync
history_uint
history_uint_sync
history_str
history_str_sync
history_log
history_text
proxy_history
events
下記はDBアクセスする関数の定義ですが、最後にint nsと言うのがナノ秒のパラメータです。(2.2.1系ソースです。)
static int DBget_history_log_value(zbx_uint64_t itemid, char **replace_to, int request, int clock, int ns)
static int get_history_log_value(const char *expression, char **replace_to, int N_functionid, int request, int clock, int ns)
static int DBitem_value(const char *expression, char **value, int N_functionid, int clock, int ns)
DBget_history_log_value関数はget_history_log_value関数から呼び出されます。
下記が、ナノ秒関係が絡む構造体で、上が1.8系、下が2.2.1系です。
typedef struct
{
DB_TRIGGER trigger;
zbx_uint64_t eventid;
zbx_uint64_t objectid;
zbx_uint64_t ack_eventid;
int source;
int object;
int clock;
int value;
int acknowledged;
int skip_actions;
}
DB_EVENT;
typedef struct
{
DB_TRIGGER trigger;
zbx_uint64_t eventid;
zbx_uint64_t objectid;
int source;
int object;
int clock;
int value;
int acknowledged;
int ns;
}
DB_EVENT;
c言語系ソースをざっくり調べただけでこの程度の修正はあります。((確実にまだあります。)
なので、1.8系でナノ秒対応は難しいだろうなと…A(^^;