KubernetesのPodのログはファイルに出力はされているが、1台のサーバーにログ集約を行い一元管理をしたい場合がある。そのような用途で利用されるソフトウェアとしてFluentdがある。
本記事では、Fluentdを使ってKubernetesのログをsyslogで送信する手順を記載する。
環境
今回の環境の構成概要図を以下に記載する。赤枠個所が本記事の設定個所となる。
以下に今回構築する各種ソフトウェアのバージョンを記載する。
- ホストOS : AlmaLinux 8.6
- Docker : 24.0.6
- cri-dockerd: 0.3.4
- Kubernetes: v1.29.4
Fluentd導入
1. fluentd-kubernetes-daemonset
のマニフェストファイルをダウンロード
FluentdをKubernetesで動作させるため、fluentd-kubernetes-daemonset
を導入する。マニフェストファイルは以下からダウンロードできる。
今回はsyslogによるログ送信をしたいことから、fluentd-daemonset-syslog.yaml
をダウンロードする。ダウンロード方法は任意となるが、curl
を使う場合は以下の通り行う。
# curl -LO https://raw.githubusercontent.com/fluent/fluentd-kubernetes-daemonset/master/fluentd-daemonset-syslog.yaml
2. マニフェストファイルを修正
マニフェストファイルそのままではsyslogファイルを正常に送ることができないため、以下の★箇所の修正を行う。
fluentd-daemonset-syslog.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
namespace: kube-system
labels:
k8s-app: fluentd-logging
version: v1
~(中略)~
---
apiVersion: apps/v1
kind: DaemonSet
~(中略)~
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1-debian-syslog
env:
- name: K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: SYSLOG_HOST
value: "192.168.1.1" # ★ログ送信先のsyslogサーバーを指定
- name: SYSLOG_PORT
value: "514" # ★ポート番号を変更する場合は修正
- name: SYSLOG_PROTOCOL
value: "tcp" # ★udpまたはtcpを指定
- name: FLUENTD_SYSTEMD_CONF
value: "disable" # ★"No such file or directory retrying in 1s"のエラーログ抑止のため指定
- name: TZ
value: "Asia/Tokyo" # ★Fluentdのログのタイムゾーンを指定(デフォルトはUTC)
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
# When actual pod logs in /var/lib/docker/containers, the following lines should be used.
- name: dockercontainerlogdirectory # ★アンコメント
mountPath: /var/lib/docker/containers # ★アンコメント
readOnly: true # ★アンコメント
# When actual pod logs in /var/log/pods, the following lines should be used.
#- name: dockercontainerlogdirectory # ★コメントアウト
# mountPath: /var/log/pods # ★コメントアウト
# readOnly: true # ★コメントアウト
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
# When actual pod logs in /var/lib/docker/containers, the following lines should be used.
- name: dockercontainerlogdirectory # ★アンコメント
hostPath: # ★アンコメント
path: /var/lib/docker/containers # ★アンコメント
# When actual pod logs in /var/log/pods, the following lines should be used.
#- name: dockercontainerlogdirectory # ★コメントアウト
# hostPath: # ★コメントアウト
# path: /var/log/pods # ★コメントアウト
3. マニフェストファイルをapply
修正したマニフェストファイルapplyする。
# kubectl apply -f fluentd-daemonset-syslog.yaml
serviceaccount/fluentd created
clusterrole.rbac.authorization.k8s.io/fluentd created
clusterrolebinding.rbac.authorization.k8s.io/fluentd created
daemonset.apps/fluentd created
成功すると、fluentdのPodが各KubernetesノードでRunningとなるはずだ。
# kubectl get pod -n=kube-system
NAME READY STATUS RESTARTS AGE
coredns-76f75df574-dntsp 1/1 Running 1 (51d ago) 105d
coredns-76f75df574-lswd4 1/1 Running 1 (51d ago) 105d
etcd-t1051kube 1/1 Running 1 (51d ago) 105d
etcd-t1052kube 1/1 Running 1 (51d ago) 105d
etcd-t1053kube 1/1 Running 1 (51d ago) 105d
fluentd-k98t7 1/1 Running 0 18s
fluentd-pn55s 1/1 Running 0 18s
fluentd-xq6rb 1/1 Running 0 18s
kube-apiserver-t1051kube 1/1 Running 1 (51d ago) 105d
kube-apiserver-t1052kube 1/1 Running 1 (51d ago) 105d
kube-apiserver-t1053kube 1/1 Running 1 (51d ago) 105d
kube-controller-manager-t1051kube 1/1 Running 3 (20d ago) 105d
kube-controller-manager-t1052kube 1/1 Running 2 (51d ago) 105d
kube-controller-manager-t1053kube 1/1 Running 2 (19d ago) 105d
kube-proxy-7lhj5 1/1 Running 1 (51d ago) 105d
kube-proxy-gx8rj 1/1 Running 1 (51d ago) 105d
kube-proxy-krjfz 1/1 Running 1 (51d ago) 105d
kube-scheduler-t1051kube 1/1 Running 3 (51d ago) 105d
kube-scheduler-t1052kube 1/1 Running 1 (51d ago) 105d
kube-scheduler-t1053kube 1/1 Running 3 (19d ago) 105d
4. 動作確認
ログ送信先となるsyslogサーバーにてログの受信状況を確認する。以下は私の環境の例となる。Fluentd経由でSquidのPodの標準出力に対して出力された接続ログが出力されている。
※Podのログを収集する場合、標準出力に対して出力させるようコンテナを構成する必要があるため注意する。
Aug 31 18:07:00 fluentd-72t29 fluentd: log:1725095215.225 83353 10.244.1.0 TCP_TUNNEL/200 6767 CONNECT www.googleapis.com:443 - HIER_DIRECT/172.217.175.234 -
Aug 31 18:07:00 fluentd-72t29 fluentd: log:1725095215.225 63309 10.244.3.0 TCP_TUNNEL/200 2408 CONNECT play.google.com:443 - HIER_DIRECT/142.251.222.14 -
Aug 31 18:07:00 fluentd-72t29 fluentd: log:1725095215.225 138131 10.244.0.1 TCP_TUNNEL/200 28279 CONNECT apis.google.com:443 - HIER_DIRECT/172.217.175.238 -
Aug 31 18:07:00 fluentd-72t29 fluentd: log:1725095215.226 63194 10.244.0.1 TCP_TUNNEL/200 4006 CONNECT play.google.com:443 - HIER_DIRECT/142.251.222.14 -
Aug 31 18:07:00 fluentd-72t29 fluentd: log:1725095215.224 56514 10.244.1.0 TCP_TUNNEL/200 2491 CONNECT ogs.google.com:443 - HIER_DIRECT/142.250.196.110 -
以上で、Fluentdを使ってKubernetesのログをsyslogで送信する手順は完了となる。
0 件のコメント:
コメントを投稿