フォーム読み込み中
ご覧いただきありがとうございます。ソフトバンクの小柳です。
前回の記事ではAlibaba CloudのLog Serviceを使用して、Kubernetes環境からログを収集する方法について紹介しました。
今回は前回の続きとなり、Log ServiceのエージェントにあたるLogtailをDaemonSetモードとSidecarモードで設定してKubernetes環境からログを収集する方法について、Alibaba Cloudコンソールの操作画像付きで説明します。
はじめに、箇条書きで簡単に前回記事のおさらいをします。
後編にあたる本記事では、ログファイルを収集する2つの方法を紹介します。
続けて読んでいただいている方や、ログファイルを収集するデモから見たい方は次の項目からご覧ください。
DaemonSetモードでテキストログを収集するLogtailの設定は、Log ServiceのコンソールとCRDによる設定の両方で設定することができます。
どの利用者でも、テキストログを収集したいという要件はあるはずなので、参考としてLog ServiceのコンソールとCRDの設定のそれぞれの設定方法の公式ドキュメントをご案内します。筆者のお勧めとしては、CRD方式の方がおすすめです。
ここからはデモに移っていきます。
ログデータ収集のデモのために、Nginxをベースとしたアプリケーションを作成します。
NginxのイメージはAlibaba Cloudから提供されており、以下のYAMLを使用してアプリケーションを構築すると、Nginxのデモ環境を構築できます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/bin/mock_log"]
args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
env:
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "test-daemonset"
volumeMounts:
- name: nginx-log
mountPath: /var/log/nginx
volumes:
- name: nginx-log
emptyDir: {}
コンソールからリソースを作成します。
アプリケーションを実行すると、Nginxのアクセスログが継続的に生成されます。
デモ用のアプリケーション環境が用意できました。
この段階ではまだログ収集はできていませんので、Log ServiceコンソールからLogtailの設定する方法を紹介していきます。
まず、Log Serviceのコンソールに移動して、新しいLogstoreを作成します。
Log Serviceのプロジェクトをクリックして「Add」ボタンをクリックします。
必要な設定項目を入力します。
「OK」ボタンをクリックし、操作を実行します。
ログストアが作成され、通知ウィンドウが表示されます。ウィンドウ内の「Data Import Wizard」ボタンをクリックすると、Logtailの設定が始まります。
データインポートウィザードで「Kubernetes - Object」オプションを選択します。
「Use Existing Machine Group」ボタンをクリックします。クラスタ作成時にLog Service機能を有効にすると、クラスタに基づいたマシングループが作成されます。
クラスタIDで指定されたマシングループのチェックボックスにチェックを入れます。
「Move」ボタンをクリックすると、適用されたサーバーグループに追加されます。
「Next」ボタンをクリックして、マシングループの設定を終了します。
設定名とログファイルのパスを設定します。今回はNginxのアクセスログを利用するので、パスは「/var/log/nginx/access.log」と設定します。
「Docker File」オプションがオンになっていることを確認します。次に、「Deploy in K8S」オプションをオンにします。
「K8S Label Whitelist」にフィルタを1つ追加します。ここでは例として 「app:nginx」を選択します。
「Next」ボタンをクリックして、設定作業を終了します。
「Next」 ボタンをクリックする前に、データ解析モードを変更することができます。デフォルトでは、「Simple Mode」に設定されており、ログデータは1行で収集されます。
これは要件に応じて更新することができます。「JSON Mode」、「Delimiter Mode」、「Full Regex Mode」などにも対応しています。テストでは、デフォルトで「Simple Mode」を使用します。
設定が終わると、ページ上でデータをプレビューできるようになりますが、ログデータはLogtailの設定に従って収集されます。ここでデータが収集されない場合は、設定を再確認し、修正する必要があります。
「Automatic Index Generation」ボタンをクリックすると、収集したデータを元にインデックスを自動生成することができます。
「Simple Mode」でデータを収集するため、行全体が「Content」という1つのフィールドとして認識されます。
「Next」ボタンをクリックすると、設定作業が終了し、成功のメッセージが表示されます。
収集したログは、「Log Query」ボタンをクリックすることでリアルタイムに確認することができます。
Logtailの設定を確認することもできます。
もう1つの方法として、CRDでLogtailの設定を行う方法を紹介します。Log Serviceコンソールから設定する場合に比べて、YAMLを用意してカスタムリソースを作成すればよいだけなので、YAMLに慣れていればCRDの方が手順が少なくてすみます。
以下のようなYAMLを用意し、CRDでカスタムリソースオブジェクトを作成します。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: simple-file-example
spec:
logstore: k8s-file
logtailConfig:
inputType: file
configName: simple-file-example
inputDetail:
logType: common_reg_log
logPath: /var/log/nginx
filePattern: access.log
dockerFile: true
IncludeK8sLabel:
app: "nginx"
Log Serviceコンソールで、作成されたLogstore、収集されたログデータ、Logtailの設定を確認することができます。
次にCRDを使って、Sidecar モードでコンテナのテキストログを収集します。
Sidecarモードでは、Logtailコンテナが作成されてアプリケーションコンテナとログディレクトリを共有します。
アプリケーションコンテナは、共有ディレクトリにログを書き込み、Logtailは共有ディレクトリのログファイルを監視してログを収集します。
DaemonSetモードと比較して、SidecarモードのほうがYAMLの記述量は増えます。
以下のようなYAMLを用意して、カスタムリソースオブジェクトを作成します。
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-log-sidecar-demo
namespace: default
spec:
template:
metadata:
name: nginx-log-sidecar-demo
spec:
restartPolicy: Never
containers:
- name: nginx-log-demo
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/bin/mock_log"]
args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
volumeMounts:
- name: nginx-log
mountPath: /var/log/nginx
##### logtail sidecar container
- name: logtail
# 詳細情報: https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/detail
# このイメージは全地域で公開されています。
image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
# sigtermを受信すると、logtailは10秒遅れて停止します。
command:
- sh
- -c
- /usr/local/ilogtail/run_logtail.sh 10
livenessProbe:
exec:
command:
- /etc/init.d/ilogtaild
- status
initialDelaySeconds: 30
periodSeconds: 30
env:
##### 基本設定
# user id
- name: "ALIYUN_LOGTAIL_USER_ID"
value: "${your_aliyun_user_id}"
# user defined id
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "${your_machine_group_user_defined_id}"
# Logtailのコンテナ内の設定ファイルのパス
- name: "ALIYUN_LOGTAIL_CONFIG"
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
##### イベントタグの設定
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
volumeMounts:
- name: nginx-log
mountPath: /var/log/nginx
##### ボリューム情報の共有
volumes:
- name: nginx-log
emptyDir: {}
---
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: nginx-log-access-example
spec:
project: k8s-demo
logstore: nginx-access
machineGroups:
- ${your_machine_group_user_defined_id}
logtailConfig:
inputType: file
configName: nginx-log-access-example
inputDetail:
logType: common_reg_log
logPath: /var/log/nginx
filePattern: access.log
dockerFile: false
上記のYAMLをベースにする場合は、基本設定と下部にあるSpec以降の箇所は、ご自身の環境に応じて設定を変更してください。
…
##### 基本設定
# user id
- name: "ALIYUN_LOGTAIL_USER_ID"
value: "${your_aliyun_user_id}"
# user defined id
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "${your_machine_group_user_defined_id}"
# Logtailのコンテナ内の設定ファイルのパス
- name: "ALIYUN_LOGTAIL_CONFIG"
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
##### イベントタグの設定
…
spec:
project: k8s-demo
logstore: nginx-access
machineGroups:
- ${your_machine_group_user_defined_id}
logtailConfig:
…
環境に応じて変更頂く箇所は、以下の箇所です。
${your_aliyun_user_id}:
Alibaba CloudアカウントのIDです。
${your_machine_group_user_defined_id}:
マシングループのカスタム識別子です。例:nginx-log-sidecar。
${your_region_config}:
プロジェクトが存在するリージョンの ID と、プロジェクトが使用するネットワークの種類を指定します。例えば、ap-northeast-1 と設定すると、日本リージョンでイントラネット経由でログデータを収集し、ap-northeast-1-internet と設定すると、インターネット経由でログデータを収集します。
${your_machine_group_user_defined_id}
は2か所ありますので、JobとCRDで定義されているそれぞれの ${your_machine_group_user_defined_id}
が同じものであることを確認してください。
Log Serviceコンソールで、作成されたLogstore、収集されたログデータ、Logtailの設定を確認します。適用されたサーバーグループ情報が、設定ファイルに設定した ${your_machine_group_user_defined_id}
と同じであることが確認できます。
後編ではLog Serviceを使用して、Kubernetes環境のログデータを収集するためのデモを2つ紹介しました。
今回は収集方法までになりますが、収集したデータはクエリーを使って簡単な分析をしたり、クエリーの結果を使って、アラート通知したりすることもできます。
今まで他の記事では紹介されてこなかったLog Serviceですが、運用を効率化したり、負荷を下げるには良い製品になりますので、独自にSyslogサーバを構築されている方などは、ぜひ利用をご検討ください。
最後に本記事は2023年2月23日時点でのサービス内容、SLA、価格について説明になります。最新の情報はAlibaba Cloud公式サイトにて確認ください。
記事内容とAlibaba Cloud公式サイトに相違があった場合は、Alibaba Cloud上の情報を優先して確認ください。
Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。
条件に該当するページがございません