はじめに
本記事は[[4枚目]Nutanix Advent Calendar 2019][Nutanix Advent Calendar 2019]の記事です
[Nutanix Advent Calendar 2019]:https://adventar.org/calendars/4475
本内容は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」が出力されているようだ
以上