Simple Log Service (SLS) を使用してワークフロー Pod のログを永続化すると、Pod が削除された後もログを照会できます。
仕組み
ワークフロークラスターを作成すると、システムは k8s-log-<clusterid> という名前の SLS プロジェクトを作成します。すべての Pod ログは、workflow-logstore という名前の Logstore に収集されます。
有効化すると、Pod が実行中かどうかに関わらず、Argo CLI、Argo Server、または Argo UI からログを表示できます。
制限事項
-
oss-artifact-repositoryと比較して、SLS は設定可能なログの保持日数によるログの自動ライフサイクル管理と強力なクエリ機能を提供します。SLS を使用してログを収集するには、archiveLogs: trueの設定を削除してください。 -
ログ収集を有効にすると、Pod が削除された後でも、ワークフローが削除される前であればワークフローログを表示できます。
-
ワークフローがデータベースに永続化されている場合、ワークフローが削除された後でも、ログを ZIP ファイルとしてダウンロードするか、SLS コンソールで表示できます。詳細については、「ワークフローの永続化」をご参照ください。
SLS の有効化
k8s-log-<clusterid> プロジェクトが自動的に作成されなかった場合は、手動で作成してください。詳細については、「SLS プロジェクトの作成」をご参照ください。
次のいずれかの方法を選択してください。
| 方法 | 最適な用途 |
|---|---|
| Alibaba Cloud Argo CLI | 単一の対話型コマンドによる迅速なセットアップ |
| AliyunLogConfig | GitOps ワークフローまたは宣言的な構成管理 |
Alibaba Cloud Argo CLI を使用した SLS の有効化
Alibaba Cloud Argo CLI は、オープンソースの Argo CLI を拡張して、削除された Pod のログ収集をサポートします。
前提条件
-
Alibaba Cloud Argo CLI 3.4.12 がインストールされている必要があります。
-
RAM ユーザーを使用する場合、RAM ユーザーに [AliyunLogReadOnlyAccess] ポリシーがアタッチされている必要があります。詳細については、「RAM ユーザーを作成し、RAM ユーザーに SLS へのアクセスを許可する」をご参照ください。
手順
SLS を設定します。プロンプトが表示されたら、ログの保持日数を入力します (デフォルト: 7)。
argo config sls
Please input log retention days. Default is 7 days.
10
期待される出力:
Start to config SLS for your cluster.
Created AliyunLogConfig CR workflow-sls-config in default namespace.
Created SLS logstore workflow-logstore in SLS project k8s-log-<clusterid>, log retention days is 10 days
この出力は、SLS が設定済みであることを示します。すべてのワークフローログは、k8s-log-<clusterid> プロジェクト内の workflow-logstore Logstore に収集されます。
AliyunLogConfig を使用した SLS の有効化
次の YAML を適用して、AliyunLogConfig カスタムリソースを作成します。SLS コントローラーは、k8s-log-<clusterid> プロジェクトと workflow-logstore Logstore を自動的に作成します。
cat << EOF | kubectl apply -f -
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: workflow-sls-config
namespace: default
spec:
lifeCycle: 5 # ログの保持期間 (日数)
logstore: workflow-logstore
logtailConfig:
configName: workflow-sls-config
inputType: plugin # プラグインベースの入力方式を使用
inputDetail:
plugin:
inputs:
- type: service_docker_stdout # コンテナの標準出力と標準エラー出力を収集
detail:
Stdout: true
Stderr: true
EOF
ログ収集の検証
SLS を有効にした後、ログが収集されていることを確認します。
-
SLS コンソールにログインします。
-
k8s-log-<clusterid>プロジェクトを検索します。 -
[workflow-logstore] をクリックし、ログエントリが表示されることを確認します。
ログが表示されない場合は、AliyunLogConfig カスタムリソースが作成されているかどうかを確認してください。
kubectl get aliyunlogconfigs -n default
出力には、エラーステータスのない workflow-sls-config が含まれている必要があります。存在しない場合やエラーがある場合は、有効化手順を再実行するか、RAM ユーザーの権限を確認してください。
Argo CLI を使用したログへのアクセス
Argo CLI には、ワークフローログを表示する 2 つの方法があります。Argo Server を必要としないため、直接的な方法 (--sls フラグ) を推奨します。
kubectl logs <pod-name> を実行して既存の Pod のログを表示できますが、このコマンドはデフォルトで最大 2,000 行を返します。より多くのログや、削除された Pod のログを表示するには、次のいずれかの方法を使用してください。
Argo CLI を直接使用する (推奨)
前提条件
-
Alibaba Cloud Argo CLI 3.4.12 がインストールされている必要があります。
-
RAM ユーザーを使用する場合、RAM ユーザーに [AliyunLogReadOnlyAccess] ポリシーがアタッチされている必要があります。
手順
-
Argo CLI がクラスターにアクセスできるように設定します。
argo config init # プロンプトに従って、AccessKey ID と AccessKey Secret を入力します。 -
ログを照会します。
# 特定の Pod のログを表示 argo logs <workflow-name> <pod-name> --sls # ワークフローのすべてのログを表示 argo logs <workflow-name> --sls
Argo Server を使用する
Argo Server 経由で SLS にアクセスするには、次の環境変数を設定します。
Argo Server 経由で SLS ログを照会するには、<pod-name>を指定する必要があります。別の名前空間にアクセスするには、その名前空間のKUBE_TOKENを取得してください。
-
必要な環境変数を設定します。
export ARGO_SERVER=argo.<cluster id>.<region>.alicontainer.com:2746 export KUBE_TOKEN=$(kubectl create token default -n default --duration 24h) export ARGO_TOKEN="Bearer $KUBE_TOKEN" export ARGO_INSECURE_SKIP_VERIFY=true -
特定の Pod のログを照会します。
argo logs <workflow-name> <pod-name>
データベースに永続化されたワークフローのログの表示
ワークフローがデータベースに永続化されている場合、ワークフローが削除された後でもログをダウンロードできます。
-
Argo CLI がクラスターにアクセスできるように設定します。
argo config init # プロンプトに従って、AccessKey ID と AccessKey Secret を入力します。 -
アーカイブされたワークフローの UID を取得します。
argo archive list期待される出力:
NAMESPACE NAME STATUS AGE DURATION PRIORITY MESSAGE P/R/C PARAMETERS UID default hello-world-l6c2r Succeeded 3d 1m 0 0/0/0 179eaef0-fde3-496f-946d-549e8f****** -
UID を使用してワークフローログをダウンロードします。
argo archive logs 179eaef0-fde3-496f-946d-549e8f******ログは、現在のディレクトリに
<workflow-name>.zipとして保存されます。
Argo UI でのログの表示
Argo UI は、ワークフロー Pod のログを直接表示します。Pod が削除された場合、リアルタイムの Pod 出力の代わりに SLS ログが表示されます。
SLS の無効化
-
AliyunLogConfigカスタムリソースを削除します。kubectl delete aliyunlogconfigs.log.alibabacloud.com workflow-sls-config -n default -
SLS コンソールにログインし、
workflow-logstoreLogstore を削除します。
次のステップ
-
ワークフローの永続化 — ワークフローの状態をデータベースに保存し、削除後もログと結果を保持します。
-
Alibaba Cloud Argo CLI — CLI をダウンロードして設定し、すべてのログにアクセスできるようにします。