本ドキュメントでは、収集データを転送するための収集エージェントを使用せずに、Syslog プロトコルを使用してデータを Log Service に収集する方法について説明します。 次のセクションには、制限、必要な設定、サンプルログ、および Syslog プロトコルの可能な使用方法を説明したアプリケーションの例に関する情報が含まれています。
制限事項
- Syslog プロトコルは、標準の RFC5424 プロトコルでなければなりません。
- 各ログは最大 64 KBです。
- データ送信のセキュリティを保証するには、TLS 1.2 (TCP ベース) を使用する必要があります。
必要な構成
- Syslog を Log Service に関連付ける必要があります。
具体的には、Syslog のポート番号 (10009) と目的とするターゲットプロジェクトのサービスエンドポイントが必要です。 たとえば、
cn-hangzhou-intranet.log.aliyuncs.com:10009
Syslog をプロジェクトに関連付けます。 Log Service のプロジェクトのサービスエンドポイントは、プロジェクトへのアクセスに使用される URL です。 詳細は、サービスエンドポイント をご参照ください. - Syslog の
STRUCTURED-DATAを
フィールド (Log Service に関連するパラメーターを含む) を次のように設定しなければなりません。設定項目 説明 例 STRUCTURED-DATA
このフィールドには名前が必要です。 この名前は Logservice でなければなりません。 Logservice Project
ユーザー名はプロジェクト名にマップされます。 test-project-1 Logstore
トピックは Logstore にマッピングされます。 データを収集する前に Logstore を作成する必要があります。
test-logstore-1 access-key-id
ご使用の AccessKey ID を示します。 Chrome ブラウザの使用を推奨します。 詳細については、「RAM ユーザーへの Log Service アクセス権限の付与」をご参照ください。
<yourAccessKeyId> {access-key-secret}
AccessKey Secret を示します。 Chrome ブラウザの使用を推奨します。 詳細については、「RAM サブアカウントへの Log Service アクセス権限の付与」をご参照ください。
<yourAccessKeySecret>
サンプルログ
フィールド | フィールドの説明 |
---|---|
__source__ | Syslog のホスト名フィールドを示します。 |
__topic__ | このフィールドは、syslog-forwarderとして修正されています。 |
__facility__ | Syslog の機能 (デバイスまたはモジュール) 情報を示します。 |
__program__ | プロセス名を示します。 |
__serverity__ | ログの重大度を示します。 |
__priority__ | ログの優先度を示します。 |
__unixtimestamp__ | ログのタイムスタンプを秒単位で示します。 |
content | Syslog の msg フィールドを示します。 |

アプリケーション例
- Log Service のプロジェクトは
test-project-1
と設定されます。 - Log Service の Logstore は
test-logstore-1
と設定されます。 - プロジェクトが存在するリージョンは
cn-hangzhou
と設定されます。 - 書き込み権限を持つ RAM ユーザーの AccessKey ID は
<yourAccessKeyId>
、RAM ユーザーの AccessKey Secret は<yourAccessKeySecret>
と設定されます。
- 適用例 1:Rsyslog を使用してシステムログをログサービスに転送します。
Rsyslog は、システムログを処理するために Linux ホストにインストールされます。 Rsyslog を使用して、システムログを Log Service に転送できます。 Rsyslog 設定ファイルの形式は、Rsyslog のバージョンによって異なります。 man rsyslogd コマンドを実行して、使用されている Rsyslog バージョンを表示できます。
注 Rsyslog に gnutls モジュールがインストールされていることを確認してください。 モジュールが Rsyslog にインストールされていない場合、 sudo apt-get install rsyslog-gnutls コマンド、または sudo yum install rsyslog-gnutls コマンドを使用してモジュールをインストールします。- Rsyslog V8 以降
$DefaultNetstreamDriverCAFile
は、システムのルート証明書があるディレクトリを示します。# Setup disk assisted queues $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName fwdRule1 # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinite retries if host is down $ActionSendTCPRebindInterval 100 # close and re-open the connection to the remote host every 100 of messages sent. #RsyslogGnuTLS set to default ca path $DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-bundle.crt template(name="LogServiceFormat" type="string" string="<%pri%>1 %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [logservice project=\"test-project-1\" logstore=\"test-logstore-1\" access-key-id=\"<yourAccessKeyId>\" access-key-secret=\"<yourAccessKeySecret>\"] %msg%\n" ) # Send messages to Loggly over TCP using the template. action(type="omfwd" protocol="tcp" target="cn-hangzhou.log.aliyuncs.com" port="10009" template="LogServiceFormat" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name" StreamDriverPermittedPeers="*.log.aliyuncs.com")
- Rsyslog V7 以降
$DefaultNetstreamDriverCAFile
システムのルート証明書があるディレクトリを示します。# Setup disk assisted queues $WorkDirectory /var/spool/rsyslog # where to place spool files $ActionQueueFileName fwdRule1 # unique name prefix for spool files $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) $ActionQueueSaveOnShutdown on # save messages to disk on shutdown $ActionQueueType LinkedList # run asynchronously $ActionResumeRetryCount -1 # infinite retries if host is down $ActionSendTCPRebindInterval 100 # close and re-open the connection to the remote host every 100 of messages sent. # RsyslogGnuTLS set to default ca path $DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-bundle.crt $ActionSendStreamDriver gtls $ActionSendStreamDriverMode 1 $ActionSendStreamDriverAuthMode x509/name $ActionSendStreamDriverPermittedPeer cn-hangzhou.log.aliyuncs.com template(name="LogServiceFormat" type="string" string="<%pri%>1 %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [logservice project=\"test-project-1\" logstore=\"test-logstore-1\" access-key-id=\"<yourAccessKeyId>\" access-key-secret=\"<yourAccessKeySecret>\"] %msg%\n") *.* action(type="omfwd" protocol="tcp" target="cn-hangzhou.log.aliyuncs.com" port="10009" template="LogServiceFormat")
- Rsyslog の要求されるバージョンを選択し、ニーズに応じて上記のいずれかの設定テンプレートを設定し、Rsyslog 設定ファイルの最後にそのテンプレートを追加します。
注 一般的に、Rsyslog 設定ファイルを格納するディレクトリは /etc/rsyslog.conf です。
- sudo service rsyslog restart および sudo /etc/init.d/syslog-ng restart コマンド、または systemctl restart rsyslog を実行して、Rsyslogを再起動します。
- システムログが生成されない場合は、logger コマンドを実行して、テスト用ログをいくつか生成します。 たとえば、
logger hello world!
です。
- Rsyslog V8 以降
- 例 2:Syslog-ng を使用したログサービスへのシステムログの転送
Syslog-ng は、ログ管理用のオープンソースデーモンであり、Unix および Unix のようなオペレーティングシステムが Syslog プロトコルをサポートするのに役立ちます。 Syslog-ng をインストールするには、
sudo yum install syslog-ng
コマンドまたはsudo apt-get install syslog-ng
コマンドを実行します。### Syslog-ng Logging Config for LogService ### template LogServiceFormat { template("<${PRI}>1 ${ISODATE} ${HOST:--} ${PROGRAM:--} ${PID:--} ${MSGID:--} [logservice project=\"test-project-1\" logstore=\"test-logstore-1\" access-key-id=\"<yourAccessKeyId>\" access-key-secret=\"<yourAccessKeySecret>\"] $MSG\n"); template_escape(no); }; destination d_logservice{ tcp("cn-hangzhou.log.aliyuncs.com" port(10009) tls(peer-verify(required-untrusted)) template(LogServiceFormat)); }; log { source(s_src); # default use s_src destination(d_logservice); }; ### END Syslog-ng Logging Config for LogService ###
注 デフォルトでは、Rsyslog は ECS インスタンスにインストールされ、システムログを処理します。 Syslog-ng を使用する場合は、RsyslogとSyslog-ng が連動しないように、まず Syslog-ng をアンインストールする必要があります。- 必要に応じて前述の設定テンプレートを設定し、Syslog-ng 設定ファイルの最後にテンプレートを追加します。
注 Syslog-ng 設定ファイルを格納する一般的なディレクトリは、 /etc/syslog-ng/syslog-ng.conf です。
- Syslog-ng を再起動するには、 sudo /etc/init.d/syslog-ng restart 、 sudo service syslog-ng restart 、および sudo systemctl restart syslog-ng コマンドを実行します。
- システムログが生成されない場合は、logger コマンドを実行して、テスト用ログをいくつか生成します。 たとえば、logger hello world! です。
- 必要に応じて前述の設定テンプレートを設定し、Syslog-ng 設定ファイルの最後にテンプレートを追加します。
例外のトラブルシューティング
- ログを手動でアップロードして、ネットワーク接続を確認します。
ncat コマンドを使用して、システムログのアップロードをシミュレートできます。 この方法によって、ネットワーク接続と、AccessKey へのログのアップロード権限の有無を確認できます。 サーバーに ncat がインストールされていない場合は、 sudo yum install nmap-ncat コマンドを実行してインストールします。 たとえば、次のコマンドを実行してシステムログを Log Service に送信します。
Log Service のプロジェクトは[root@iZbp145dd9fccuidd7g**** ~]# ncat --ssl cn-hangzhou.log.aliyuncs.com 10009 <34>1 2019-03-28T03:00:15.003Z mymachine.example.com su - ID47 [logservice project="test-project-1" logstore="test-logstore-1" access-key-id="<yourAccessKeyId>" access-key-secret="<yourAccessKeySecret>"] this is a test message
test-project-1
と設定され、Logstore はtest-logstore-1
と設定されます。 プロジェクトが存在するリージョンは cn-hangzhou です。 書き込み権限を持つ RAM ユーザーの AccessKey ID は<yourAccessKeyId>
、 RAM ユーザーの AccessKey Secret は<yourAccessKeySecret>
と設定されます。注- ncat コマンドを実行してログをアップロードするときは、ISO 8601 形式でログの現在の時刻を指定する必要があります。 たとえば、2019-03-28T11:00:15.003 にログをアップロードする場合、ncat コマンドに追加する前に 2019-03-28T03:00:15.003Z に変換する必要があります。
- ncat コマンドは、ネットワーク接続割り込みを識別できません。 したがって、ncat コマンドを実行してから 30 秒以内にメッセージを入力して Enter を押す必要があります。
- ログ収集エラーの診断
ログを手動でアップロードできない場合、ログ収集エラーを診断してエラー情報を表示できます。 詳細については「収集エラー診断 」をご参照ください。
- Rsyslog エラーログの確認
デフォルトで、Rsyslog ログは / var / log / message ディレクトリに保存されます。 vimコマンドを実行すれば、ディレクトリを表示できます。
- Rsyslog エラー
dlopen: /usr/lib64/rsyslog/lmnsd_gtls.so: cannot open shared object file: No such file or directory
このエラーは、gnutls モジュールがインストールされていないために発生しました。 Rsyslog をインストールし再起動するには、sudo apt-get install rsyslog-gnutls コマンドまたは sudo yum install rsyslog-gnutls コマンドを実行します。
- Rsyslog エラー
unexpected GnuTLS error -53 - this could be caused by a broken connection. GnuTLS reports:Error in the push function
このエラーは、TCP 接続が長時間アイドル状態であり、その後強制的にシャットダウンされたために発生しました。 Rsyslog は自動的に Log Service に接続できます。
- Rsyslog エラー
- Syslog-ng エラーログの確認
Syslog-ng ログは、デフォルトでジャーナルログに保存されます。 ログの詳細を確認するには、systemctl status syslog-ng.service および journalctl -xe コマンドを実行します。
syslog-ng 初期化エラーJob for syslog-ng.service failed because the control process exited with error code. See "systemctl status syslog-ng.service" and "journalctl -xe" for details
Syslog-ng 設定ファイル形式が有効であり、ファイル内の設定が競合していないこと (たとえば、複数の internal(); 設定されていないこと) を確認する必要があります。