お知らせです。

Xymonの解説書籍を発行しました。

書名は「Xymonによるシステム監視入門」。
B5版144ページでフルカラーの144ページ。
紙版と電子書籍版があり、電子書籍版はPDFとEPUBのセットです。
紙版には電子書籍のダウンロードの権利もセットでついてきます。


システム監視ソフトウェアの「Xymon」を解説した唯一の書籍です。
おもにXymon公式ホームページの内容を和訳して補足説明しています。

 

一般の書店では発売されていません。

日本Xymonユーザーズグループ ネットショップでお買い求めください。
 

 

XymonにはEnable/Disable という監視を一時停止する機能がありますが、それが使えなくなる事象がありました。

AmazonLinux 2環境のXymon 4.3.30。

Enable/Disable画面の Select what to Disable で「Apply」をクリックしても、なにも反応がありません。

 

このとき Apache のエラーログには

============================================================

AH01215: 日付 Enadis POST that is not coming from self or svcstatus (referer=http://example.com/xymon-seccgi/enadis.sh). Ignoring.: /home/xymon/cgi-secure/enadis.sh, referer: http://example.com/xymon-seccgi/enadis.sh

============================================================

とのエラーメッセージが出力されています。

EnadisとはEnable/Disableの略ですね。POSTはhttpのPOSTのことではなく投稿との意味。

Enable/Disableの投稿は自分自身かsvcstatusからは許可されていないとのことです。

リバースプロキシを使って転送している環境なので使えないと出ているようです。

 

公式メーリングリストを探すと 2019年9月12日 に René Vermareさんからパッチの投稿がありました。

https://lists.xymon.com/archive/2019-September/046708.html から引用。

============================================================

--- a/web/enadis.c      2019-07-23 17:29:06.000000000 +0200

+++ b/web/enadis.c      2019-09-11 01:06:33.283642013 +0200

@@ -332,7 +332,8 @@

    int argi, i;

    char *username = getenv("REMOTE_USER");

    char *userhost = getenv("REMOTE_HOST");

-    char *userip   = getenv("REMOTE_ADDR");

+    char *userip   = getenv("HTTP_X_FORWARDED_FOR");

+    if (userip == NULL) userip = getenv("REMOTE_ADDR");

    SBUF_DEFINE(fullmsg);

    char *envarea = NULL;

    int  obeycookies = 1;

--- a/web/acknowledge.c 2019-07-23 17:29:06.000000000 +0200

+++ b/web/acknowledge.c 2019-09-11 01:01:55.493676233 +0200

@@ -374,7 +374,8 @@

 

    parse_query();

        if (getenv("REMOTE_USER")) {

-            char *remaddr = getenv("REMOTE_ADDR");

+            char *remaddr = getenv("HTTP_X_FORWARDED_FOR");

+            if (remaddr == NULL) remaddr = getenv("REMOTE_ADDR");

 

            SBUF_MALLOC(acking_user, 1024 + strlen(getenv("REMOTE_USER")) + (remaddr ? strlen(remaddr) : 0));

            snprintf(acking_user, acking_user_buflen, "\nAcked by: %s", getenv("REMOTE_USER"));

============================================================

(注意:字下げはTABです)

 

変更点を見てもらえばわかりますが、REMOTE_ADDRでIPアドレスを拾っているところをHTTP_X_FORWARDED_FORから拾うように変えています。これで良さそうです。

フロントのリバースプロキシをApacheでやっている場合は、

============================================================

ProxyPreserveHost on

============================================================

で転送先にホスト名を送る必要があります。

 

このパッチをソースの直下に置いて、reverse_proxy.patchとか適当にファイル名をつけて保存。

============================================================

patch -p1 < reverse_proxy.patch

============================================================

で適応したら、あとはビルドし直します。

 

これで解決しました。

 

 

 

アメブロだとコードが見にくいので、Qiitaにも同じ内容を書きました。

https://qiita.com/koshikawa/items/416b705d4344109833ab

 

AmazonLinux2やCentOS7、RHEL7以降のsystemd用Xymon起動スクリプトの例

 

Xymonサーバ

 /etc/systemd/system/xymon.service

========================================================

[Unit]

Description=XymonClient

After=network-online.target

 

[Service]

Type=forking

ExecStart=/home/xymon/server/xymon.sh start

ExecStop=/home/xymon/server/xymon.sh stop

User=xymon

Group=xymon

 

[Install]

WantedBy=network-online.target

========================================================

起動の登録

systemctl enable xymon

起動

systemctl start xymon

 

Xymonクライアント側

/etc/systemd/system/xymonclient.service

========================================================

 

[Unit]

Description=XymonClient

After=network-online.target

 

[Service]

Type=forking

ExecStart=/home/xymon/runclient.sh start

ExecStop=/home/xymon/runclient.sh stop

User=xymon

Group=xymon

 

[Install]

WantedBy=network-online.target

========================================================

起動の登録

systemctl enable xymonclient

起動

systemctl start xymonclient