いつもお世話になっております。
ローテートするログの監視について質問です。 ログローテートへの対応は1.8からの機能であること、また1.6.6ではパッチを利用してログ監視アイテムのファイル名に{YYYYMMDD}を使用できるとのことですが、現在私はZABBIX 1.4.6を使用しています。
この環境でログローテートの監視をするには、バージョンを1.6か1.8にあげるしかないでしょうか。
ご返答よろしくお願いします。
KAOさん
1.4系ではかなり厳しいですね、しかたなく1.6系で自作したパッチなので… 注)1.6のパッチはZABBIX-JPや本家の正式パッチではないです。念の為
私が1.4で運用していた時はシンボリックリンクを張り替えて対応していたりしました。
1.6系のパッチは未検証ですが、ロジック自体は1.4系でも使えると思います。必要でしたら1.4.6でパッチ作りますけどいりますか? ※:検証環境が今手元にないので時間がかかってしまいそうです。
KAZさん
ご返答ありがとうございます。
ログローテートに対応していないのであれば、バージョンアップも考えているのですが、バージョンを上げると今までの設定も全て飛んでしまうのでしょうか?
バージョンをあげることによって、設定が飛ぶようであればバージョンアップをせずに、このままの環境で使用したいので、お手数をおかけして申し訳ないのですが、パッチの作成をお願いしたいです。
よろしくお願いします。
私が1.4系から1.6系にアップした時は設定は全部引き継がれました。只、全ての機能を使ってないので確約はできませんが…
■アップグレードについて 1.8系は未だお勧めし辛いです。 1.8.3で現在修正される問題が130以上あります。(※1) また、まだ増えそうな勢いです。 現在未解決な不具合も1.8.4に持ち越されるものもあるかと思います。
なので、今アップされるなら1.6.9をお勧めします。
只、1.8系だとバグがあっても本家に報告すれば対応が早いと言う利点があります。1.6系は旧バージョンと言う事もあって対応は後回しにされてしまいがちです。(最悪対応なかったりします。)
■パッチについて パッチ作成自体は大した作業じゃないので気にしないで下さい。 どちらかと言うと、1.4.6環境を作る方が大変ですね…
■その他 ※1:2010.06.03 18時現在 ZABBIX SUPPORTで下記のキーワードで検索しました。
[url=https://support.zabbix.com/]Dashboard - ZABBIX SUPPORT[/url]
1)Project ZABBIX BUGS AND ISSUES 2)Issue Type Bug 3)Fix For 1.8.3 4)Status Closed 5)Resolutions Fixed
1.8系はまだ安定稼動してないのですね。 バージョンアップはもうしばらく検討したいと思います。
お手数かけますが、1.4.6環境でのパッチの作成お願いできますでしょうか。
1.4.6と1.6.6のそうースはほとんど違いがありませんでした。(笑) 一応、{YYYYMMDD}使って値が取れること確認しました。
■確認した環境とか… <code> 1)環境 :CentOS5.5 2)事前作業:「chmod go+rx /var/log/httpd」で読み取り件追加 3)ログ :apacheのログを年月日付きで出力して、それを取得させてみました。 /var/log/httpd/access_log.20100604 /var/log/httpd/error_log.20100604 4)アイテム:log[/var/log/httpd/access_log.{YYYYMMDD} log[/var/log/httpd/error_log.{YYYYMMDD} </code>
パッチはメールで送った方が良いですか? その場合は、私のプロフィールに連絡先を載せてますのでお手数ですがメール下さい。
1.4.6-1を使用されている場合は、SRPMを取得してspecファイルを修正してrpmbuildを実行してrpmを作りインストールするのが簡単だと[d]もいます[/d]思います。 ZABBIX-JPのSRPMのrpmbuildについて質問がある場合はお手数ですが、別スレでお願い致します。m(__)m
↓下記がパッチです。 <code> diff -Nur zabbix-1.4.6.org/src/zabbix_agent/logfiles.c zabbix-1.4.6/src/zabbix_agent/logfiles.c --- zabbix-1.4.6.org/src/zabbix_agent/logfiles.c 2008-07-23 20:47:30.000000000 +0900 +++ zabbix-1.4.6/src/zabbix_agent/logfiles.c 2010-06-04 15:48:24.000000000 +0900 @@ -22,6 +22,8 @@ #include "log.h" #include "logfiles.h"
+#define MVAR_YYYYMMDD "{YYYYMMDD}" + /****************************************************************************** * * * Function: process_log * @@ -49,9 +51,19 @@ char **value ) { + struct stat buf_today, + buf_yesterday; + struct tm *tm; + time_t now; FILE *f = NULL; - struct stat buf; - int ret = FAIL; + char *pl, + *pr = NULL, + *filename_today = NULL, + *filename_yesterday = NULL, + *currentfilename = NULL, + *replace_to = NULL; + int ret = FAIL, + var_len;
assert(filename); assert(lastlogsize); @@ -59,40 +71,84 @@
zabbix_log( LOG_LEVEL_DEBUG, "In process log (%s,%li)", filename, *lastlogsize);
- /* Handling of file shrinking */ - if( 0 != stat(filename,&buf) ) - { - zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename, strerror(errno)); + if (NULL != strchr(filename, '{')){ + filename_today = zbx_strdcat(filename_today, filename); + pl = filename_today; + pr = strchr(pl, '{'); + while(NULL != pr){ + var_len = 1; + if (0 == strncmp(pr, MVAR_YYYYMMDD, strlen(MVAR_YYYYMMDD))){ + var_len = strlen(MVAR_YYYYMMDD); + now = time(NULL); + tm = localtime(&now); + replace_to = zbx_dsprintf(replace_to, "%.4d%.2d%.2d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + pr[0] = '\0'; + } + filename_today = zbx_strdcat(filename_today, replace_to); + zbx_free(replace_to); + pl = pr + var_len; + pr = strchr(pl, '{'); + } + filename_yesterday = zbx_strdcat(filename_yesterday, filename); + pl = filename_yesterday; + pr = strchr(pl, '{'); + while(NULL != pr){ + var_len = 1; + if (0 == strncmp(pr, MVAR_YYYYMMDD, strlen(MVAR_YYYYMMDD))){ + var_len = strlen(MVAR_YYYYMMDD); + now = time(NULL) - 86400; + tm = localtime(&now); + replace_to = zbx_dsprintf(replace_to, "%.4d%.2d%.2d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + pr[0] = '\0'; + } + filename_yesterday = zbx_strdcat(filename_yesterday, replace_to); + zbx_free(replace_to); + pl = pr + var_len; + pr = strchr(pl, '{'); + } } - else - { - if(buf.st_size<*lastlogsize) - { + + + /* Handling of file shrinking */ + if(0 != stat(filename_today,&buf_today)){ + zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename_today, strerror(errno)); + }else{ + if(buf_today.st_size<*lastlogsize){ *lastlogsize=0; + if('\0' == *filename_yesterday){ + *lastlogsize=0; + currentfilename = filename_today; + }else{ + /* check second file if in loglotate mode. */ + if(0 != stat(filename_yesterday,&buf_yesterday)){ + zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename_yesterday, strerror(errno)); + *lastlogsize=0; + currentfilename = filename_today; + }else{ + if(buf_yesterday.st_size<=*lastlogsize){ + *lastlogsize=0; + currentfilename = filename_today; + }else{ + currentfilename = filename_yesterday; + } + } + } + }else{ + currentfilename = filename_today; }
- if(NULL == (f = fopen(filename,"r") )) - { - zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename, strerror(errno)); - } - else - { - if(-1 == fseek(f,*lastlogsize,SEEK_SET)) - { - zabbix_log( LOG_LEVEL_WARNING, "Cannot set postition to [%li] for [%s] [%s]", *lastlogsize, filename, strerror(errno)); - } - else - { + if(NULL == (f = fopen(currentfilename,"r") )){ + zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", currentfilename, strerror(errno)); + }else{ + if(-1 == fseek(f,*lastlogsize,SEEK_SET)){ + zabbix_log(LOG_LEVEL_WARNING, "Cannot set postition to [%li] for [%s] [%s]", *lastlogsize, currentfilename, strerror(errno)); + }else{ *value = zbx_malloc(*value, MAX_BUF_LEN); - memset(*value, 0, MAX_BUF_LEN);
- if(NULL == fgets(*value, MAX_BUF_LEN-1, f)) - { + if (NULL == fgets(*value, MAX_BUF_LEN, f)){ /* EOF */ zbx_free(*value); - } - else - { + }else{ *lastlogsize = ftell(f); zbx_rtrim(*value, "\r\n"); } @@ -101,6 +157,8 @@ zbx_fclose(f); } } + zbx_free(filename_today); + zbx_free(filename_yesterday);
return ret; } </code>
パッチをメールでほしいのですが、プロフィールを見てもメールアドレスが記載されていないようなのですが・・・
PMをクリックするとメールフォームが出てきますが、こちらから送ればよろしいのでしょうか?
初歩的な質問で申し訳ありません。。
ログインされてます? ログインしないとメールアドレスは表示されないかと…
KAZさん ログインした状態ですが、メールアドレスが見当たりません。 kodaiさんのアドレスは見れるのですが・・・
すいません。 私の設定が間違ってました。m(__)m 今なら見えるはずです。
私はログインすれば見えてたのですが、公開しないとメールアドレスは他の人からは見えないみたいですね。A(^^;
メールアドレス見れました。 ありがとうございました。
アカウント名 KAO
Zabbix関連
KAZ - 投稿数: 1085
KAOさん
1.4系ではかなり厳しいですね、しかたなく1.6系で自作したパッチなので…
注)1.6のパッチはZABBIX-JPや本家の正式パッチではないです。念の為
私が1.4で運用していた時はシンボリックリンクを張り替えて対応していたりしました。
1.6系のパッチは未検証ですが、ロジック自体は1.4系でも使えると思います。必要でしたら1.4.6でパッチ作りますけどいりますか?
※:検証環境が今手元にないので時間がかかってしまいそうです。
KAO - 投稿数: 19
KAZさん
ご返答ありがとうございます。
ログローテートに対応していないのであれば、バージョンアップも考えているのですが、バージョンを上げると今までの設定も全て飛んでしまうのでしょうか?
バージョンをあげることによって、設定が飛ぶようであればバージョンアップをせずに、このままの環境で使用したいので、お手数をおかけして申し訳ないのですが、パッチの作成をお願いしたいです。
よろしくお願いします。
KAZ - 投稿数: 1085
KAOさん
私が1.4系から1.6系にアップした時は設定は全部引き継がれました。只、全ての機能を使ってないので確約はできませんが…
■アップグレードについて
1.8系は未だお勧めし辛いです。
1.8.3で現在修正される問題が130以上あります。(※1)
また、まだ増えそうな勢いです。
現在未解決な不具合も1.8.4に持ち越されるものもあるかと思います。
なので、今アップされるなら1.6.9をお勧めします。
只、1.8系だとバグがあっても本家に報告すれば対応が早いと言う利点があります。1.6系は旧バージョンと言う事もあって対応は後回しにされてしまいがちです。(最悪対応なかったりします。)
■パッチについて
パッチ作成自体は大した作業じゃないので気にしないで下さい。
どちらかと言うと、1.4.6環境を作る方が大変ですね…
■その他
※1:2010.06.03 18時現在 ZABBIX SUPPORTで下記のキーワードで検索しました。
[url=https://support.zabbix.com/]Dashboard - ZABBIX SUPPORT[/url]
1)Project
ZABBIX BUGS AND ISSUES
2)Issue Type
Bug
3)Fix For
1.8.3
4)Status
Closed
5)Resolutions
Fixed
KAO - 投稿数: 19
KAZさん
ご返答ありがとうございます。
1.8系はまだ安定稼動してないのですね。
バージョンアップはもうしばらく検討したいと思います。
お手数かけますが、1.4.6環境でのパッチの作成お願いできますでしょうか。
よろしくお願いします。
KAZ - 投稿数: 1085
KAOさん
1.4.6と1.6.6のそうースはほとんど違いがありませんでした。(笑)
一応、{YYYYMMDD}使って値が取れること確認しました。
■確認した環境とか…
<code>
1)環境 :CentOS5.5
2)事前作業:「chmod go+rx /var/log/httpd」で読み取り件追加
3)ログ :apacheのログを年月日付きで出力して、それを取得させてみました。
/var/log/httpd/access_log.20100604
/var/log/httpd/error_log.20100604
4)アイテム:log[/var/log/httpd/access_log.{YYYYMMDD}
log[/var/log/httpd/error_log.{YYYYMMDD}
</code>
パッチはメールで送った方が良いですか?
その場合は、私のプロフィールに連絡先を載せてますのでお手数ですがメール下さい。
1.4.6-1を使用されている場合は、SRPMを取得してspecファイルを修正してrpmbuildを実行してrpmを作りインストールするのが簡単だと[d]もいます[/d]思います。
ZABBIX-JPのSRPMのrpmbuildについて質問がある場合はお手数ですが、別スレでお願い致します。m(__)m
↓下記がパッチです。
<code>
diff -Nur zabbix-1.4.6.org/src/zabbix_agent/logfiles.c zabbix-1.4.6/src/zabbix_agent/logfiles.c
--- zabbix-1.4.6.org/src/zabbix_agent/logfiles.c 2008-07-23 20:47:30.000000000 +0900
+++ zabbix-1.4.6/src/zabbix_agent/logfiles.c 2010-06-04 15:48:24.000000000 +0900
@@ -22,6 +22,8 @@
#include "log.h"
#include "logfiles.h"
+#define MVAR_YYYYMMDD "{YYYYMMDD}"
+
/******************************************************************************
* *
* Function: process_log *
@@ -49,9 +51,19 @@
char **value
)
{
+ struct stat buf_today,
+ buf_yesterday;
+ struct tm *tm;
+ time_t now;
FILE *f = NULL;
- struct stat buf;
- int ret = FAIL;
+ char *pl,
+ *pr = NULL,
+ *filename_today = NULL,
+ *filename_yesterday = NULL,
+ *currentfilename = NULL,
+ *replace_to = NULL;
+ int ret = FAIL,
+ var_len;
assert(filename);
assert(lastlogsize);
@@ -59,40 +71,84 @@
zabbix_log( LOG_LEVEL_DEBUG, "In process log (%s,%li)", filename, *lastlogsize);
- /* Handling of file shrinking */
- if( 0 != stat(filename,&buf) )
- {
- zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename, strerror(errno));
+ if (NULL != strchr(filename, '{')){
+ filename_today = zbx_strdcat(filename_today, filename);
+ pl = filename_today;
+ pr = strchr(pl, '{');
+ while(NULL != pr){
+ var_len = 1;
+ if (0 == strncmp(pr, MVAR_YYYYMMDD, strlen(MVAR_YYYYMMDD))){
+ var_len = strlen(MVAR_YYYYMMDD);
+ now = time(NULL);
+ tm = localtime(&now);
+ replace_to = zbx_dsprintf(replace_to, "%.4d%.2d%.2d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
+ pr[0] = '\0';
+ }
+ filename_today = zbx_strdcat(filename_today, replace_to);
+ zbx_free(replace_to);
+ pl = pr + var_len;
+ pr = strchr(pl, '{');
+ }
+ filename_yesterday = zbx_strdcat(filename_yesterday, filename);
+ pl = filename_yesterday;
+ pr = strchr(pl, '{');
+ while(NULL != pr){
+ var_len = 1;
+ if (0 == strncmp(pr, MVAR_YYYYMMDD, strlen(MVAR_YYYYMMDD))){
+ var_len = strlen(MVAR_YYYYMMDD);
+ now = time(NULL) - 86400;
+ tm = localtime(&now);
+ replace_to = zbx_dsprintf(replace_to, "%.4d%.2d%.2d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
+ pr[0] = '\0';
+ }
+ filename_yesterday = zbx_strdcat(filename_yesterday, replace_to);
+ zbx_free(replace_to);
+ pl = pr + var_len;
+ pr = strchr(pl, '{');
+ }
}
- else
- {
- if(buf.st_size<*lastlogsize)
- {
+
+
+ /* Handling of file shrinking */
+ if(0 != stat(filename_today,&buf_today)){
+ zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename_today, strerror(errno));
+ }else{
+ if(buf_today.st_size<*lastlogsize){
*lastlogsize=0;
+ if('\0' == *filename_yesterday){
+ *lastlogsize=0;
+ currentfilename = filename_today;
+ }else{
+ /* check second file if in loglotate mode. */
+ if(0 != stat(filename_yesterday,&buf_yesterday)){
+ zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename_yesterday, strerror(errno));
+ *lastlogsize=0;
+ currentfilename = filename_today;
+ }else{
+ if(buf_yesterday.st_size<=*lastlogsize){
+ *lastlogsize=0;
+ currentfilename = filename_today;
+ }else{
+ currentfilename = filename_yesterday;
+ }
+ }
+ }
+ }else{
+ currentfilename = filename_today;
}
- if(NULL == (f = fopen(filename,"r") ))
- {
- zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", filename, strerror(errno));
- }
- else
- {
- if(-1 == fseek(f,*lastlogsize,SEEK_SET))
- {
- zabbix_log( LOG_LEVEL_WARNING, "Cannot set postition to [%li] for [%s] [%s]", *lastlogsize, filename, strerror(errno));
- }
- else
- {
+ if(NULL == (f = fopen(currentfilename,"r") )){
+ zabbix_log( LOG_LEVEL_WARNING, "Cannot open [%s] [%s]", currentfilename, strerror(errno));
+ }else{
+ if(-1 == fseek(f,*lastlogsize,SEEK_SET)){
+ zabbix_log(LOG_LEVEL_WARNING, "Cannot set postition to [%li] for [%s] [%s]", *lastlogsize, currentfilename, strerror(errno));
+ }else{
*value = zbx_malloc(*value, MAX_BUF_LEN);
- memset(*value, 0, MAX_BUF_LEN);
- if(NULL == fgets(*value, MAX_BUF_LEN-1, f))
- {
+ if (NULL == fgets(*value, MAX_BUF_LEN, f)){
/* EOF */
zbx_free(*value);
- }
- else
- {
+ }else{
*lastlogsize = ftell(f);
zbx_rtrim(*value, "\r\n");
}
@@ -101,6 +157,8 @@
zbx_fclose(f);
}
}
+ zbx_free(filename_today);
+ zbx_free(filename_yesterday);
return ret;
}
</code>
KAO - 投稿数: 19
KAZさん
パッチをメールでほしいのですが、プロフィールを見てもメールアドレスが記載されていないようなのですが・・・
PMをクリックするとメールフォームが出てきますが、こちらから送ればよろしいのでしょうか?
初歩的な質問で申し訳ありません。。
KAZ - 投稿数: 1085
KAOさん
ログインされてます?
ログインしないとメールアドレスは表示されないかと…
KAO - 投稿数: 19
KAZさん
ログインした状態ですが、メールアドレスが見当たりません。
kodaiさんのアドレスは見れるのですが・・・
KAZ - 投稿数: 1085
KAOさん
すいません。
私の設定が間違ってました。m(__)m
今なら見えるはずです。
私はログインすれば見えてたのですが、公開しないとメールアドレスは他の人からは見えないみたいですね。A(^^;
KAO - 投稿数: 19
KAZさん
メールアドレス見れました。
ありがとうございました。