alibaba-log-controller をデプロイし、AliyunLogConfig CRD を定義して、ECI Pod からテキストログと stdout ログを収集します。
前提条件
以下を確認してください。
-
ACK Serverless クラスターが作成されていること。
-
ack-virtual-node 2.7.0 以降がインストールされていること。
ログ収集の設定
alibaba-log-controller のデプロイ
-
ACK コンソールにログインします。
-
左上の隅で、リージョンを選択します。
-
[クラスター] ページで、クラスター名をクリックします。
-
左側のナビゲーションペインで、[運用 > アドオン] を選択します。
-
[ログとモニタリング] タブをクリックし、[Alibaba-log-controller] カードを見つけ、[インストール]をクリックします。
-
確認ダイアログで、[OK] をクリックします。
インストール後、[Alibaba-log-controller] カードに [インストール済み] が表示されます。
AliyunLogConfig CRD の作成
ACK Serverless クラスターに接続し、ログ収集 CRD の YAML 設定ファイルを作成します。
CRD を作成する前に、以下の制約に注意してください。
-
configNameはmetadata.nameと完全に一致させる必要があります。 -
CRD ベースのログ収集は、CRD の作成後に作成された ECI Pod にのみ適用されます。既存の Pod からログを収集するには、ローリングアップデートで再作成してください。
-
CRD を介して Logtail 設定を作成した後は、CRD を介してのみ管理してください。SLS コンソールでの変更は同期されません。更新するには、AliyunLogConfig CRD を直接変更します。
CRD テンプレート
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: simple-stdout-example
spec:
project: k8s-my-project
logstore: k8s-stdout
logstoreMode: standard
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: simple-stdout-example
inputDetail:
...
基本パラメーター
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
project |
string | いいえ | Simple Log Service (SLS) プロジェクト名。デフォルトでは、Logtail のインストールプロジェクトが使用されます。存在しない場合は自動的に作成されます。 |
logstore |
string | はい | Logstore 名。存在しない場合は自動的に作成されます。 |
logstoreMode |
string | いいえ | Logstore のタイプ。有効な値:query、standard。作成時にのみ有効です。詳細については、「Logstore の管理」をご参照ください。 |
shardCount |
int | いいえ | シャード数。有効な値:1~10。デフォルト:2。 |
lifeCycle |
int | いいえ | ログ保持期間 (日数)。有効な値:1~3650。デフォルト:90。3650 は無期限を意味します。作成時にのみ有効です。 |
machineGroups |
array | いいえ | マシングループ。SLS は Logtail のインストール時に k8s-group-${your_k8s_cluster_id} を自動的に作成します。 |
logtailConfig |
object | はい | Logtail 設定。以下のサブパラメーターをご参照ください。 |
logtailConfig のサブパラメーター:
| サブパラメーター | 説明 |
|---|---|
configName |
Logtail 設定名。metadata.name と一致させる必要があります。 |
inputType |
ログソースタイプ。plugin:stdout およびプラグインベースのソース (MySQL バイナリログなど)。file:正規表現や区切り文字などの固定モードのテキストログ。 |
inputDetail |
詳細な入力設定。 |
outputType |
出力タイプ。LogService に設定します。ログは SLS にのみ送信されます。 |
outputDetail |
詳細な出力設定。 |
logSample |
サンプルログエントリ。 |
詳細については、「Logtail の設定」をご参照ください。
コンテナフィルタリング
フィルタリングオプションは Logtail のバージョンによって異なります。
v1.0.34 より前の Logtail では、環境変数とコンテナラベルでのみフィルタリングします。
Kubernetes の名前空間とコンテナ名は、以下のラベルにマッピングされます。
-
名前空間:
io.kubernetes.pod.namespace -
コンテナ名:
io.kubernetes.container.name
これらのラベルを使用してコンテナをフィルタリングします。不十分な場合は、環境変数のホワイトリストまたはブラックリストを使用します。
Logtail v1.0.34 以降では、Pod 名、名前空間、コンテナ名、ラベルなどの Kubernetes レベルのメタデータでフィルタリングします。
logtailConfig.inputDetail.advanced.k8s でフィルタリングパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
IncludeK8sLabel |
Kubernetes ラベルのホワイトリスト — 含めるコンテナ |
ExcludeK8sLabel |
Kubernetes ラベルのブラックリスト — 除外するコンテナ |
K8sNamespaceRegex |
名前空間でフィルタリング (正規表現) |
K8sPodRegex |
Pod 名でフィルタリング (正規表現) |
K8sContainerRegex |
コンテナ名でフィルタリング (正規表現) |
詳細については、「DaemonSet モードで Kubernetes コンテナからテキストログを収集する」および「DaemonSet モードで Kubernetes コンテナから stdout および stderr を収集する (旧バージョン)」をご参照ください。
例:テキストログの収集
次の内容で log-file.yaml を作成します。
apiVersion: log.alibabacloud.com/v1alpha1 # デフォルト値を使用します。変更しないでください。
kind: AliyunLogConfig # デフォルト値を使用します。変更しないでください。
metadata:
name: test-file # Kubernetes クラスター内の一意のリソース名。
spec:
project: k8s-log-c326bc86**** # オプション。プロジェクトが存在しない場合は自動的に作成されます。
logstore: test-file # 必須。Logstore が存在しない場合は自動的に作成されます。
logtailConfig:
inputType: file # file = テキストログ、plugin = stdout ログ。
configName: test-file # metadata.name と一致させる必要があります。
inputDetail:
logType: common_reg_log # シンプルモード。
logPath: /log/ # ログファイルディレクトリ。
filePattern: "*.log" # ログファイル名のパターン。* と ? をサポートします。
dockerFile: true # コンテナから収集するには true に設定します。
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sPodRegex: '^(eci-sls-demo.*)$'
例:stdout ログの収集
次の内容で log-stdout.yaml を作成します。
apiVersion: log.alibabacloud.com/v1alpha1 # デフォルト値を使用します。変更しないでください。
kind: AliyunLogConfig # デフォルト値を使用します。変更しないでください。
metadata:
name: test-stdout # Kubernetes クラスター内の一意のリソース名。
spec:
project: k8s-log-c326bc86**** # オプション。プロジェクトが存在しない場合は自動的に作成されます。
logstore: test-stdout # 必須。Logstore が存在しない場合は自動的に作成されます。
shardCount: 2 # オプション。デフォルト:2。有効な値:1~10。
lifeCycle: 90 # オプション。デフォルト:90 日。有効な値:1~3650。3650 は無期限を意味します。
logtailConfig:
inputType: plugin # plugin = stdout ログ、file = テキストログ。
configName: test-stdout # metadata.name と一致させる必要があります。
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
CRD 設定の適用
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
設定を適用すると、Logtail は各コンテナから stdout またはテキストログを収集し、SLS に送信します。
クエリと分析を有効にするには、Logstore にインデックスを作成してください。詳細については、「インデックスの作成」をご参照ください。
ログ収集のテスト
CRD の作成後、新しく作成された Pod からのログが自動的に収集されます。以下の手順で設定を確認してください。
テストアプリケーションの作成
次の Deployment を含む test-sls-crd.yaml を作成してください。コンテナは stdout とログファイルの両方に書き込みます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
command:
- /bin/sh
image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox
kubectl create -f test-sls-crd.yaml
Pod ステータスの確認
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
収集されたログの表示
-
SLS コンソールにログインします。
-
プロジェクト名をクリックします。
-
コンテナの Logstore をクリックしてログを表示します。
テキストログ収集:
stdout ログ収集:
特定の Pod のログ収集の無効化
デフォルトでは、CRD は一致するすべての Pod からログを収集します。特定の Pod を除外するには、Pod のメタデータに k8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加してください。
-
アノテーションは、トップレベルのメタデータではなく、
spec.template.metadataに追加してください。 -
アノテーションは Pod の作成時にのみ有効になります。Pod の更新中の変更は無効です。
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" # ログ収集を無効にします。
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox