tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

Zabbix で障害が発生した場合に Action の RemoteCommand 経由で自動復旧させる

Environment

  • Zabbix server 4.0.1
  • 監視 target: Windows Server 2016

Requirement

Zabbix で障害状態になった場合, 自動復旧させる.

PreRequire

監視 target の server における zabbix_agentd.conf で EnableRemoteCommands=1 を指定しておく.

Process

監視 item と監視 trigger を作成する.

# 監視 item の例
            <items>
                <item>
                    <name>Check-Login</name>
                    <type>10</type>
                    <snmp_community/>
                    <snmp_oid/>
                    <key>check_login[-h,{HOST.DNS},-u,{$KANSHI_USER},-p,{$KANSHI_PASS}]</key>
                    <delay>1m</delay>
                    <history>7d</history>
                    <trends>0</trends>
                    <status>0</status>
                    <value_type>4</value_type>
                    <allowed_hosts/>
                    <units/>
                    <snmpv3_contextname/>
                    <snmpv3_securityname/>
                    <snmpv3_securitylevel>0</snmpv3_securitylevel>
                    <snmpv3_authprotocol>0</snmpv3_authprotocol>
                    <snmpv3_authpassphrase/>
                    <snmpv3_privprotocol>0</snmpv3_privprotocol>
                    <snmpv3_privpassphrase/>
                    <params/>
                    <ipmi_sensor/>
                    <authtype>0</authtype>
                    <username/>
                    <password/>
                    <publickey/>
                    <privatekey/>
                    <port/>
                    <description/>
                    <inventory_link>0</inventory_link>
                    <applications/>
                    <valuemap/>
                    <logtimefmt/>
                    <preprocessing/>
                    <jmx_endpoint/>
                    <timeout>3s</timeout>
                    <url/>
                    <query_fields/>
                    <posts/>
                    <status_codes>200</status_codes>
                    <follow_redirects>1</follow_redirects>
                    <post_type>0</post_type>
                    <http_proxy/>
                    <headers/>
                    <retrieve_mode>0</retrieve_mode>
                    <request_method>0</request_method>
                    <output_format>0</output_format>
                    <allow_traps>0</allow_traps>
                    <ssl_cert_file/>
                    <ssl_key_file/>
                    <ssl_key_password/>
                    <verify_peer>0</verify_peer>
                    <verify_host>0</verify_host>
                    <master_item/>
                </item>
            </items>
# 1min 間隔の監視で 5min の内 2回 `CRITICAL` の結果が出た場合 trigger を kick
    <triggers>
        <trigger>
            <expression>{template_sample:check_login[-h,{HOST.DNS},-u,{$KANSHI_USER},-p,{$KANSHI_PASS}].count(5m, CRITICAL)}&gt;2</expression>
            <recovery_mode>1</recovery_mode>
            <recovery_expression>{template_sample:check_login[-h,{HOST.DNS},-u,{$KANSHI_USER},-p,{$KANSHI_PASS}].iregexp(OK)}&lt;&gt;0</recovery_expression>
            <name>Check-Login_{HOST.DNS}_CRITICAL</name>
            <correlation_mode>0</correlation_mode>
            <correlation_tag/>
            <url/>
            <status>0</status>
            <priority>1</priority>
            <description/>
            <type>0</type>
            <manual_close>1</manual_close>
            <dependencies/>
            <tags/>
        </trigger>

Zabbix Action を作成する.

復旧方法の例として IIS DefaultAppPool の recycle を行うこととする.

powershell.exe -command "Start-WebAppPool DefaultAppPool"

f:id:hrt0kmt:20220407125121p:plain
Zabbix Action

動作確認

  • [x] 障害状態になった場合 Trigger が kick されること.
  • [x] Zabbix Action 経由で Remote Command が実行されること.
  • [x] Zabbix Agent 経由で recycle が行われること.