Nutanix Syslogをサーバに出力してみる


はじめに

本記事は[4枚目]Nutanix Advent Calendar 2019の記事です

本内容は2019/12/18時点での内容となります。また、本記事による万が一の不測の損害・不利益等は負いかねます。

環境

  • 今回のお話は以下の環境です
    • 当初AOSは5.10.0.1だったが後述のトラブルも踏まえVerUPした
ソフトウェア バージョン
AOS 5.10.6
HV AHV
HV Version 20170830

きっかけ

  • 社内規則上、一定期間内・一定プライオリティ以上のログを保管する必要があったが Nutanixのログローテート契機は保持期間ではなく容量(9GB)で決められる(容量を超えると自動でローテート) ことがわかったため、自前でsyslogサーバを構築し、そこに蓄積させることにした
    • 今回は自前syslogサーバの設定は割愛し、HCI側の設定のみ抜粋

事前知識

  • Nutanixのログファイルは「genesis status」コマンドで得られるプロセス単位で出てくる
nutanix@NTNX-SERIALNUMBER-A-CVM:CVM_IPADDRESS:~$ genesis status
YYYY-MM-DD hh:mm:ss: Services running on this node:
  abac: []
  acropolis: [11951, 12056, 12057, 12058]
  alert_manager: [11851, 11914, 11915, 11996]
  aplos: [13142, 13181, 13182, 13189, 13387, 13565]
  aplos_engine: [12939, 13003, 13004, 13005]
  arithmos: [11874, 11948, 11949, 12115]
  athena: [11513, 11607, 11608, 11609]
  cassandra: [10591, 10626, 10627, 10632, 10732]
  catalog: [11901, 11983, 11984, 11985]
  (省略)
  • 場所は /home/nutanix/data/logs配下
    • .outがメインのログ、.XXXは各プライオリティのログ
nutanix@NTNX-SERIALNUMBER-A-CVM:CVM_IPADDRESS:~$ ls /home/nutanix/data/logs/
acropolis.FATAL
acropolis.out
acropolis.out.YYYYMMMDD-hhmmss
acropolis-scheduler.out
acropolis-scheduler.out.YYYYMMMDD-hhmmss
alert_manager.ERROR
alert_manager.INFO
(省略)

設定内容

  • Nutanixクラスタのどれか一つのCVMにログインしてncliを開始
$ ssh CVM_IPADDRESS -l nutanix 
Nutanix Controller VM 
nutanix@CVM_IPADDRESS's password:
nutanix@NTNX-SERIALNUMBER-A-CVM:CVM_IPADDRESS:~$ ncli 
Welcome, admin 
You're now connected to CULSTER_ID (CLUSTER_NAME) at 127.0.0.1 
<ncli> 
  • 設定変更前に一度syslogを無効する
<ncli>   rsyslog-config set-status enable=false 

     RSyslog Status            : Disabled 
     RSyslog Servers           : [None] 
  • 転送先のsyslogサーバを登録
    • 転送プロトコルはTCPも選べるがUDPにした(この理由も後述)
<ncli> rsyslog-config add-server name=SYSLOG_SERVER_HOSTNAME relp-enabled=false ip-address=SYSLOG_SERVER_IPADDRESS  port=514 network-protocol=udp |

     Name                      : SYSLOG_SERVER_HOSTNAME 
     IP Address                : SYSLOG_SERVER_IPADDRESS
     Port                      : 514
     Protocol                  : UDP 
     Relp Enabled              : false 
  • 登録を確認
<ncli>  rsyslog-config ls-servers 
     Name                      : SYSLOG_SERVER_HOSTNAME 
     IP Address                : SYSLOG_SERVER_IPADDRESS
     Port                      : 514 
     Protocol                  : UDP 
     Relp Enabled              : false 
  • モジュール(対象のプロセスとそのレベル) をプロセスごとに設定
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=ACROPOLIS level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=AUDIT level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=CASSANDRA level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=CEREBRO level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=CURATOR level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=GENESIS level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=PRISM level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=STARGATE level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=SYSLOG_MODULE level=ERROR include-monitor-logs= false  
<ncli> rsyslog-config add-module server-name=SYSLOG_SERVER_HOSTNAME module-name=ZOOKEEPER level=ERROR include-monitor-logs= false  
  • モジュール追加はls-modulesオプションで確認可能
<ncli> rsyslog-config ls-modules server-name=SYSLOG_SERVER_HOSTNAME 
     Module Name               : ACROPOLIS 
     Log Level                 : ERROR 
     Include Monitor Logs      : false
     Module Name               : AUDIT 
     Log Level                 : ERROR 
     Include Monitor Logs      : false

     Module Name               : CASSANDRA
     Log Level                 : ERROR 
     Include Monitor Logs      : false 

     Module Name               : CEREBRO 
     Log Level                 : ERROR 
     Include Monitor Logs      : false 

     Module Name               : CURATOR 
     Log Level                 : ERROR
     Include Monitor Logs      : false 

     Module Name               : GENESIS
     Log Level                 : ERROR
     Include Monitor Logs      : false

     Module Name               : PRISM
     Log Level                 : ERROR 
     Include Monitor Logs      : false

     Module Name               : STARGATE
     Log Level                 : ERROR
     Include Monitor Logs      : false

     Module Name               : SYSLOG_MODULE
     Log Level                 : ERROR 
     Include Monitor Logs      : false

     Module Name               : ZOOKEEPER
     Log Level                 : ERROR
     Include Monitor Logs      : false 
  • syslogを有効にする
<ncli>  rsyslog-config set-status enable=true 

     RSyslog Status            : Enabled 
     RSyslog Servers           : 1 
     Name                      : SYSLOG_SERVER_HOSTNAME 
     IP Address                : SYSLOG_SERVER_IPADDRESS 
     Port                      : 514 
     Protocol                  : UDP 
     Relp Enabled              : false 

ポイントなど

  • Prismからは設定不可能、nCLIから設定する
  • ファシリティはlocal0で固定(変更不可)
  • プライオリティはデフォルトだとERROR
    • 今回の設定は明示的にERRORに設定した例
  • AOS5.10.0.1の環境で試行錯誤していたところ、何故かクラスタ上のVMが不用意に落ちるトラブル発生
    • 当該AOSのバグで、「syslog転送(TCP)に失敗するとHCI内部のキューがスタック(?)」したようだ
    • 対応策は「syslogをUDPで転送」 or 「AOSを上げる」 → 他の影響もないので両方とも実施した

わからなかったこと・今後理解したいこと

  • 「Include Monitor Logs」のオプションの意味・必要性?
    • Trueにすると、指定したログレベルに関わらずログファイルの出力される?なんのため?(INFOではだめなのか?)
  • ローカル(/home/nutanix/data/logs/)に生成されるログファイルの出力規則はどう決まるのか?
    • プロセスXXXは「XXX.out」と「XXX.WARNING」は出力されているがプロセスYYYは「YYY.out」と「YYY.ERROR」と「YYY.INFO」が出力されているようだ

以上