ログ収集は、デフォルトでコンソールに設定されます。 Log Service では、Kubernetes マイクロサービス開発用のログ収集の CRD 設定も提供します。 これにより、kubectl を使用して設定を管理できます。
この方法は、Kubernetes のデプロイメント、および公開プロセスと連携されているため、収集設定管理に CRD メソッドを使用することを推奨します。
実装の原則

インストールコマンドを実行して、 alibaba-log-controllerHelm
パッケージをインストールします。 Helm パッケージは、主に次の操作を実行します。
- aliyunlogconfigs CRD (カスタムリソース定義) を作成します。
- alibaba-log-controller をデプロイします。
- Logtail DaemonSet をデプロイします。
設定の内部ワークフローは次のとおりです。
kubectl
または他のツールを使用して、aliyunlogconfigs CRD 設定を適用します。- alibaba-log-controller は、設定のアップデートを検出します。
- alibaba-log-controller は、CRD の内容とサーバーのステータスに基づき、Logstore の作成、設定の作成、およびマシングループのアプリケーション設定のリクエストを自動的に送信します。
- DaemonSet モードで実行される Logtail は、サーバー設定のリクエストを定期的に送信し、新しい設定または更新された設定を取得し、高速ロードを実行します。
- Logtail は、設定情報に基づき、各コンテナ (pod) から標準出力またはファイルを収集します。
- Logtail は、処理され集められたデータを Log Service に送信します。
設定方法
apiVersion: log.alibabacloud.com/v1alpha1 ## デフォルト値。変更する必要はありません。
kind: AliyunLogConfig ## デフォルト値。変更する必要はありません。
metadata:
name: simple-stdout-example ## リソース名。ラスター内で一意である必要があります。
spec:
logstore: k8s-stdout ## Logstore 名。存在しなければ自動的に作成されます。
shardCount: 2 ## [オプション] Logstore のパーティション数。 デフォルト値は 2 です。 値の範囲は 1〜10 です。
lifeCycle: 90 ## [オプション] Logstore の保存期間。 デフォルト値は 90 です。 値の範囲は 1〜7300 です。 値 7300 は、永久的な保存を示しています。
logtailConfig: ## 詳細な設定
inputType: plugin ## 収集の入力タイプ。 通常、値はファイルかプラグインです。
configName: simple-stdout-example ## 収集設定名。 値はリソース名 (metadata.name) と同じでなければなりません。
inputDetail: ## 詳細な設定情報。例をご参照ください。
...
設定が完了して適用されると、alibaba-log-controller が自動的に作成されます。
設定の表示
Kubernetes CRD またはコンソールで設定を表示できます。
- すべての設定を表示するには、
kubectl get aliyunlogconfigs
を実行します。[root@iZbp1dsbiaZ ~]# kubectl get aliyunlogconfigs NAME AGE regex-file-example 10s regex-stdout-example 4h simple-file-example 5s
- 詳細な設定とステータスを表示するには、
kubectl get aliyunlogconfigs ${configname} -o yaml
を実行します。設定の
status
フィールドには、設定の実行結果が表示されます。 設定が正常に適用された場合、statusCode
の値はstatus
フィールドで 200 になります。statusCode
の値が 200 でない場合、設定の適用に失敗しています。[root@iZbp1dsbiaZ ~]# kubectl get aliyunlogconfigs simple-file-example -o yaml apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | clusterName: "" creationTimestamp: 2018-05-17T08:44:46Z generation: 0 name: simple-file-example namespace: default resourceVersion: "21790443" selfLink: /apis/log.alibabacloud.com/v1alpha1/namespaces/default/aliyunlogconfigs/simple-file-example uid: 8d3a09c4-59ae-11e8-851d-00163f008685 spec: lifeCycle: null logstore: k8s-file logtailConfig: configName: simple-file-example inputDetail: dockerFile: true dockerIncludeEnv: ALIYUN_LOGTAIL_USER_DEFINED_ID: "" filePattern: simple.LOG logPath: /usr/local/ilogtail logType: common_reg_log inputType: file machineGroups: null project: "" shardCount: null status: status: OK statusCode: 200
設定例
コンテナ標準出力
コンテナ標準出力では、inputType
を plugin
に設定します。inputDetail
の plugin
フィールドの詳細情報を入力します 。 設定フィールドの詳細については、「コンテナ標準出力」をご参照ください。
- シンプル収集モード
環境変数の設定
COLLECT_STDOUT_FLAG=false
があるコンテナを除く、すべてのコンテナの標準出力 (stdout と stdeer) を収集します。apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in your k8s cluster name: simple-stdout-example spec: # logstore name to upload log logstore: k8s-stdout # logtail config detail logtailConfig: # docker stdout's input type is 'plugin' inputType: plugin # logtail config name, should be same with [metadata.name] configName: simple-stdout-example inputDetail: plugin: inputs: - # input type type: service_docker_stdout detail: # collect stdout and stderr Stdout: true Stderr: true # collect all container's stdout except containers with "COLLECT_STDOUT_FLAG:false" in docker env config ExcludeEnv: COLLECT_STDOUT_FLAG: "false"
-
カスタム収集モード
Grafana のアクセスログを収集し、アクセスログを構造化データに解析します。
Grafana コンテナには環境変数GF_INSTALL_PLUGINS=grafana-piechart-….
の設定があります。 Logtail がこのコンテナのみから標準出力を収集できるようにIncludeEnv
をGF_INSTALL_PLUGINS: ‘’
に設定できます。図 2. カスタム収集モード Grafana のアクセスログの形式は次のとおりです。t=2018-03-09T07:14:03+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/ status=302 remote_addr=172.16.64.154 time_ms=0 size=29 referer=
正規表現を使用してアクセスログを解析します。 詳細な設定は次のとおりです。apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in your k8s cluster name: regex-stdout-example spec: # logstore name to upload log logstore: k8s-stdout-regex # logtail config detail logtailConfig: # docker stdouts input type is plugin inputType: plugin # logtail config name, should be same with [metadata.name] configName: regex-stdout-example inputDetail: plugin: inputs: - # input type type: service_docker_stdout detail: # stdout 出力のみを収集し、stdeer 出力は収集しません。 Stdout: true Stderr: false # コンテナの環境変数設定でキーが “GF_INSTALL_PLUGINS” である stdout 出力のみを収集します。 IncludeEnv: GF_INSTALL_PLUGINS: '' processors: - # 正規表現を使用します。 type: processor_regex detail: # docker によって収集されたデータには、デフォルトで、キー “コンテンツ” があります。 SourceKey: content # 抽出の正規表現 Regex: 't=(\d+-\d+-\w+:\d+:\d+\+\d+) lvl=(\w+) msg="([^"]+)" logger=(\w+) userId=(\w+) orgId=(\w+) uname=(\S*) method=(\w+) path=(\S+) status=(\d+) remote_addr=(\S+) time_ms=(\d+) size=(\d+) referer=(\S*). *' # 抽出されたキー Keys: ['time', 'level', 'message', 'logger', 'userId', 'orgId', 'uname', 'method', 'path', 'status', 'remote_addr', 'time_ms', 'size', 'referer'] # 元のフィールドを保持します。 KeepSource: true NoKeyError: true NoMatchError: true
設定が適用されると、 Log Service によって収集されるデータは次のようになります。図 3. 収集されるログデータ
コンテナファイル
- シンプルファイル
環境変数設定にキー
ALIYUN_LOGTAIL_USER_DEFINED_ID
が含まれるコンテナからログファイルを収集します。 ログファイルのパスは/data/logs/app_1
で、ファイル名はsimple.LOG
です。apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in your k8s cluster name: simple-file-example spec: # logstore name to upload log logstore: k8s-file # logtail config detail logtailConfig: # log file's input type is 'file' inputType: file # logtail config name, must same with [metadata.name] configName: simple-file-example inputDetail: # 正規表現型のログについては、logType を “common_reg_log”に設定します。 logType: common_reg_log # ログファイルフォルダ logPath: /data/logs/app_1 # ワイルドカードをサポートするファイル名。たとえば、log.log filePattern: simple.LOG # コンテナからファイルを収集します。dockerFile フラグは true に設定されています。 dockerFile: true # Only collect container with "ALIYUN_LOGTAIL_USER_DEFINED_ID" in docker env config dockerIncludeEnv: ALIYUN_LOGTAIL_USER_DEFINED_ID: ""
- 正規表現ファイルを完成する
Java プログラムログの例を次に示します。
ログにはエラースタック情報が含まれているため、ログエントリは複数の行に分割されることがあります。 したがって、行の先頭に正規表現を設定する必要があります。 各フィールドを抽出するには、正規表現を使用します。 設定の詳細は次のとおりです。[2018-05-11T20:10:16,000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiring sessions java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x8F",...' for column 'data' at row 1 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84) at org.springframework.jdbc.support.AbstractFallbackSQLException
設定が適用されると、 Log Service によって収集されるデータは次のようになります。apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in your k8s cluster name: regex-file-example spec: # logstore name to upload log logstore: k8s-file logtailConfig: # log file's input type is 'file' inputType: file # logtail config name, should be same with [metadata.name] configName: regex-file-example inputDetail: # 正規表現型のログについては、logType を “common_reg_log” に設定します。 logType: common_reg_log # ログファイルフォルダ logPath: /app/logs # ワイルドカードをサポートするファイル名。たとえば、log.log filePattern: error.LOG # 最初の行の正規表現 logBeginRegex: '\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s. *' # 正規表現を解析します。 regex: '\[([^]]+)]\s\[(\w+)]\s\[(\w+)]\s\[([^:]+):(\d+)]\s(. *)' # 抽出されたキーのリスト key : ["time", "level", "method", "file", "line", "message"] # 正規表現のログ。 ログの timeはデフォルトで時間解析のために抽出されます。 時間が必要ない場合は、フィールドを無視します。 timeFormat: '%Y-%m-%dT%H:%M:%S' # コンテナからファイルを収集します。dockerFile フラグは true に設定されています。 dockerFile: true # Only collect container with "ALIYUN_LOGTAIL_USER_DEFINED_ID" in docker env config dockerIncludeEnv: ALIYUN_LOGTAIL_USER_DEFINED_ID: ""
図 4. 収集されるログデータ - 区切り文字パターンファイル
Logtail は、区切り文字モードでのログ解析をサポートしています。例は次のとおりです。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in your k8s cluster name: delimiter-file-example spec: # logstore name to upload log logstore: k8s-file logtailConfig: # log file's input type is 'file' inputType: file configName: delimiter-file-example # logtail config name, should be same with [metadata.name] inputDetail: # 区切り文字タイプのログの場合は、logType を delimiter_log に設定します。 logType: delimiter_log # ログファイルフォルダ logPath: /usr/local/ilogtail # ワイルドカードをサポートするファイル名。たとえば、 log.log filePattern: delimiter_log.LOG # 複数文字の区切り文字を使用します。 separator: '|&|' # 抽出されたキーのリスト key : ['time', 'level', 'method', 'file', 'line', 'message'] # 解析時間のキー。 時間の解析が不要な場合はフィールドを無視します。 timeKey: 'time' # 時間解析メソッド。 時間の解析が不要な場合はフィールドを無視します。 timeFormat: '%Y-%m-%dT%H:%M:%S' # コンテナからファイルを収集します。dockerFile フラグは true に設定されています。 dockerFile: true # Only collect container with "ALIYUN_LOGTAIL_USER_DEFINED_ID" in docker env config dockerIncludeEnv: ALIYUN_LOGTAIL_USER_DEFINED_ID: ''
- JSON モードファイル
ファイル内の各データ行が JSON オブジェクトの場合、JSON メソッドを解析に使用できます。例は次のとおりです。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in you k8s cluster name: json-file-example spec: # logstore name to upload log logstore: k8s-file logtailConfig: # log file's input type is 'file' inputType: file # logtail config name, should be same with [metadata.name] configName: json-file-example inputDetail: # 区切り文字タイプのログの場合は、logType を json_log に設定します。 logType: json_log # ログファイルフォルダ logPath: /usr/local/ilogtail # ワイルドカードをサポートするファイル名。たとえば、log_*.log filePattern: json_log.LOG # 解析時間のキー。 時間の解析が不要な場合はフィールドを無視します。 timeKey: 'time' # 時間解析メソッド。 時間の解析が不要な場合はフィールドを無視します。 timeFormat: '%Y-%m-%dT%H:%M:%S' # コンテナからファイルを収集します。dockerFile フラグは true に設定されている dockerFile: true # Only collect container with "ALIYUN_LOGTAIL_USER_DEFINED_ID" in docker env config dockerIncludeEnv: ALIYUN_LOGTAIL_USER_DEFINED_ID: ""