web-dev-qa-db-ja.com

check_mk_agentは、ネットワークによってトリガーされた場合にのみクラスターチェックを実行するとハングします

私のcheck_mkサーバーはインストールされているいくつかのRHELノードに接続しますcheck_mk_agent(バージョン1.2.4p3)。これらのノードのグループは、ペースメーカークラスターに属しています。

Check_mkエージェントはデフォルトで構成されています-xinetサービスはポート6556/TCPにバインドされて構成されています。

service check_mk
{
        type           = UNLISTED
        port           = 6556
        socket_type    = stream
        protocol       = tcp
        wait           = no
        user           = root
        server         = /usr/bin/check_mk_agent

        # If you use fully redundant monitoring and poll the client
        # from more then one monitoring servers in parallel you might
        # want to use the agent cache wrapper:
        #server         = /usr/bin/check_mk_caching_agent

        # configure the IP address(es) of your Nagios server here:
        #only_from      = 127.0.0.1 10.0.20.1 10.0.20.2

        # Don't be too verbose. Don't log every check. This might be
        # commented out for debugging. If this option is commented out
        # the default options will be used for this service.
        log_on_success =

        disable        = no
}

/ usr/bin/check_mk_agentスクリプトクラスター検出段階でハング:のため、ソケットが6556/TCPポートに対して開かれている場合、これらのクラスターノードの1つに問題があります。

crm_mon -1 -r | grep ···

これにより、check_mkサーバーはそのノードの問題を報告します。

Check_mk_agentスクリプトでクラスター検出コマンドをコメントアウトすると、正常に機能します

# Heartbeat monitoring
# Different handling for heartbeat clusters with and without CRM
# for the resource state
###if [ -S /var/run/heartbeat/crm/cib_ro -o -S /var/run/crm/cib_ro ] || pgrep crmd > /dev/null 2>&1; then
###  echo '<<<heartbeat_crm>>>'
###  crm_mon -1 -r | grep -v ^$ | sed 's/^ //; /^\sResource Group:/,$ s/^\s//; s/^\s/_/g'
###fi
###if type cl_status > /dev/null 2>&1; then
###  echo '<<<heartbeat_rscstatus>>>'
###  cl_status rscstatus
###
###  echo '<<<heartbeat_nodes>>>'
###  for NODE in $(cl_status listnodes); do
###    if [ $NODE != $(echo $HOSTNAME | tr 'A-Z' 'a-z') ]; then
###      STATUS=$(cl_status nodestatus $NODE)
###      echo -n "$NODE $STATUS"
###      for LINK in $(cl_status listhblinks $NODE 2>/dev/null); do
###        echo -n " $LINK $(cl_status hblinkstatus $NODE $LINK)"
###      done
###      echo
###    fi
###  done
###fi

この問題は、残りのクラスターノードでは見つかりません。

障害のあるノードの内部から接続を開いたときに同じ動作が発生するため、ネットワークの問題ではないと確信しています。

telnet 127.0.0.1 6556

最も奇妙なのはコマンドcrm_mon -1 -rを1日に何度も手動で実行しますが、ハングすることはありませんです。

ターミナルが接続されていない状態で実行された場合、コマンドcrm_mon -1 -rがハングする原因は何ですか?1つのノードのみ

よろしくお願いします

更新1

Check_mkに似た新しいxinetdサービスを作成しましたが、名前、ポート番号、サーバーを変更しています。サーバースクリプトにはこれらの行のみが含まれています

#!/bin/bash
unset LANG
export LC_ALL=C

date
/usr/sbin/crm_mon -1 -r -N
#/usr/sbin/crm_resource -L
date

そしてそれもハングします。出力が同じcrm_resource -Lを使用しようとしましたが、ハングします。

# telnet 127.0.0.1 6557
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Fri Jul 14 08:37:36 CEST 2017

更新2

SELinuxの設定はDisabledです。

1
Jdamian

SELinuxの構成は何ですか?

Xinetdを介して呼び出されたCheck_mkは、ルートシェルで呼び出された場合とは異なるコンテキストを持ちます。これがNagiosリモートプラグインエグゼキュータの邪魔になるのを見てきましたが、check_mkにも同じ影響を与える可能性があるようです。

SELinuxが実施しているかどうかを確認します。

$ getenforce

パーミッシブに設定し、問題が解決するかどうかを確認します。

$ setenforce 0

それが問題である場合は、SELinuxを無効にするのではなく、autdit2allowを使用してSELinuxポリシーを調整することをお勧めします。

Audit2allowの使用については、次のリンクを参照してください。 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Fixing_Problems-Allowing_Access_audit2allow.html

1
Steve F