本ドキュメントでは、収集データを転送するための収集エージェントを使用せずに、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>

サンプルログ

Log Service は、受信した Syslog データを自動的に解決します。 さらに、Log Service は AccessKey が漏洩しないように Logservice フィールドを削除します。 Log Service にアップロードされるフィールドは次のとおりです (フィールドの詳細については、「 RFC5424プロトコル」をご参照ください)。
フィールド フィールドの説明
__source__ Syslog のホスト名フィールドを示します。
__topic__ このフィールドは、syslog-forwarderとして修正されています。
__facility__ Syslog の機能 (デバイスまたはモジュール) 情報を示します。
__program__ プロセス名を示します。
__serverity__ ログの重大度を示します。
__priority__ ログの優先度を示します。
__unixtimestamp__ ログのタイムスタンプを秒単位で示します。
content Syslog の msg フィールドを示します。

アプリケーション例

次の各アプリケーション例では、ホストで Syslog ログを直接ログサービスに収集するために、必要なパラメーターが次のように設定されています。
  • 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")
    1. Rsyslog の要求されるバージョンを選択し、ニーズに応じて上記のいずれかの設定テンプレートを設定し、Rsyslog 設定ファイルの最後にそのテンプレートを追加します。
      一般的に、Rsyslog 設定ファイルを格納するディレクトリは /etc/rsyslog.conf です。
    2. sudo service rsyslog restart および sudo /etc/init.d/syslog-ng restart コマンド、または systemctl restart rsyslog を実行して、Rsyslogを再起動します。
    3. システムログが生成されない場合は、logger コマンドを実行して、テスト用ログをいくつか生成します。 たとえば、logger hello world! です。
  • 例 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 をアンインストールする必要があります。
    1. 必要に応じて前述の設定テンプレートを設定し、Syslog-ng 設定ファイルの最後にテンプレートを追加します。
      Syslog-ng 設定ファイルを格納する一般的なディレクトリは、 /etc/syslog-ng/syslog-ng.conf です。
    2. Syslog-ng を再起動するには、 sudo /etc/init.d/syslog-ng restart sudo service syslog-ng restart 、および sudo systemctl restart syslog-ng コマンドを実行します。
    3. システムログが生成されない場合は、logger コマンドを実行して、テスト用ログをいくつか生成します。 たとえば、logger hello world! です。

例外のトラブルシューティング

  • ログを手動でアップロードして、ネットワーク接続を確認します。
    ncat コマンドを使用して、システムログのアップロードをシミュレートできます。 この方法によって、ネットワーク接続と、AccessKey へのログのアップロード権限の有無を確認できます。 サーバーに ncat がインストールされていない場合は、 sudo yum install nmap-ncat コマンドを実行してインストールします。 たとえば、次のコマンドを実行してシステムログを 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
    Log Service のプロジェクトは 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 を押す必要があります。
    コマンドを実行した後、Log Service コンソールでログをプレビューできます。 詳細については、「 ログデータのプレビュー」をご参照ください。
  • ログ収集エラーの診断

    ログを手動でアップロードできない場合、ログ収集エラーを診断してエラー情報を表示できます。 詳細については「収集エラー診断 」をご参照ください。

  • 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 に接続できます。

  • 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(); 設定されていないこと) を確認する必要があります。