ラズパイk8sにOpenTelemetry + loki + grafanaをインストールしてログを収集する
前回fluent-bitでlokiにログ収集 したのですが、 今回はOpenTelemetryでログを収集してみます。
環境
ubuntu@k8s1:~$ kubectl get node
NAME STATUS ROLES AGE VERSION
k8s1 Ready control-plane,etcd,master 304d v1.28.10+rke2r1
k8s2 Ready worker 181d v1.28.10+rke2r1
k8s3 Ready worker 304d v1.28.10+rke2r1
Loki構築
こちら
を参考にLokiを再インストールします。
とはいえ設定は前回
と変わりません。
ubuntu@k8s1:~$ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories
ubuntu@k8s1:~$ helm repo list
NAME URL
grafana https://grafana.github.io/helm-charts
ubuntu@k8s1:~$ helm pull --untar grafana/loki
ubuntu@k8s1:~$ vi loki/values.yaml
values.yamlは以下のように変更しました。
変更内容は前回
を参照ください。
※自身の環境に合わせて変更してください。
ubuntu@k8s1:~$ sdiff -s loki/values.yaml loki/values.yaml_org
dnsService: rke2-coredns-rke2-coredns | dnsService: "kube-dns"
auth_enabled: false | auth_enabled: true
replication_factor: 1 | replication_factor: 3
bucketNames: | # bucketNames:
chunks: loki-chunks | # chunks: FIXME
ruler: loki-ruler | # ruler: FIXME
admin: loki-admin | # admin: FIXME
endpoint: http://192.168.0.205:9000 | endpoint: null
secretAccessKey: minio123 | secretAccessKey: null
accessKeyId: minio | accessKeyId: null
schemaConfig: | schemaConfig: {}
configs: <
- from: '2024-04-01' <
index: <
period: 24h <
prefix: loki_index_ <
object_store: s3 <
schema: v13 <
store: tsdb <
replicas: 2 | replicas: 3
storageClass: local-path | storageClass: null
replicas: 2 | replicas: 3
storageClass: local-path | storageClass: null
replicas: 2 | replicas: 3
storageClass: local-path | storageClass: null
allocatedMemory: 4096 | allocatedMemory: 8192
Lokiのバージョンは3.0以上みたいなのでallow_structured_metadataは入れていません。
ubuntu@k8s1:~$ helm search repo grafana/loki
NAME CHART VERSION APP VERSION DESCRIPTION
grafana/loki 6.29.0 3.4.2 Helm chart for Grafana Loki and Grafana Enterpr...
grafana/loki-canary 0.14.0 2.9.1 Helm chart for Grafana Loki Canary
grafana/loki-distributed 0.80.5 2.9.13 Helm chart for Grafana Loki in microservices mode
grafana/loki-simple-scalable 1.8.11 2.6.1 Helm chart for Grafana Loki in simple, scalable...
grafana/loki-stack 2.10.2 v2.9.3 Loki: like Prometheus, but for logs.
インストールします。
ubuntu@k8s1:~$ helm install -n loki loki loki/
NAME: loki
LAST DEPLOYED: Sat May 10 21:15:19 2025
NAMESPACE: loki
STATUS: deployed
REVISION: 1
NOTES:
***********************************************************************
Welcome to Grafana Loki
Chart version: 6.29.0
Chart Name: loki
Loki version: 3.4.2
***********************************************************************
以下略
無事インストールできました。
ubuntu@k8s1:~$ k get pod -n loki
NAME READY STATUS RESTARTS AGE
loki-backend-0 2/2 Running 0 3m4s
loki-backend-1 2/2 Running 0 3m4s
loki-canary-gssjq 1/1 Running 0 3m5s
loki-canary-jx688 1/1 Running 0 3m5s
loki-chunks-cache-0 2/2 Running 0 3m4s
loki-gateway-66db9ccbf9-hsrlz 1/1 Running 0 3m5s
loki-read-59bffc8545-djvsb 1/1 Running 0 3m4s
loki-read-59bffc8545-xtlb7 1/1 Running 0 3m5s
loki-results-cache-0 2/2 Running 0 3m4s
loki-write-0 1/1 Running 0 3m4s
loki-write-1 1/1 Running 0 3m4s
OpenTelemetry Collectorインストール
こちら を参考にインストールしてみます。
ubuntu@k8s1:~$ helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
"open-telemetry" has been added to your repositories
ubuntu@k8s1:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "open-telemetry" chart repository
...Successfully got an update from the "grafana" chart repository
Update Complete. ⎈Happy Helming!⎈
ubuntu@k8s1:~$ helm repo list
NAME URL
grafana https://grafana.github.io/helm-charts
open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
ubuntu@k8s1:~$ helm search repo open-telemetry/opentelemetry-collector
NAME CHART VERSION APP VERSION DESCRIPTION
open-telemetry/opentelemetry-collector 0.122.5 0.123.1 OpenTelemetry Collector Helm chart for Kubernetes
ubuntu@k8s1:~$ helm pull --untar open-telemetry/opentelemetry-collector
ubuntu@k8s1:~$ vi opentelemetry-collector/values.yaml
values.yamlの変更点は以下の通り。
まずドキュメントの通りイメージリポジトリを変更します。
デフォルトだと存在しないタグになったので指定しました。
image:
repository: "otel/opentelemetry-collector-k8s"
tag: "0.123.0"
次に今回はログを収集するため
ログコレクションプリセット
を有効化します。
config部分は
Loki
を参考にしてください。
endpointは前回
と同じくgatewayのserviceを指定します。
mode: "daemonset"
presets:
logsCollection:
enabled: true
config:
exporters:
debug: {}
otlphttp:
endpoint: http://loki-gateway.loki.svc.cluster.local/otlp
service:
pipelines:
logs:
exporters:
- otlphttp
加えてKubernetesメタデータをログに加えて欲しいので
Kubernetes Attributes プリセット
も有効化しました。
presets:
kubernetesAttributes:
enabled: true
差分は以下になります。
warning出るのでresourcesのコメントアウトを外しました。
ubuntu@k8s1:~$ sdiff -s opentelemetry-collector/values.yaml opentelemetry-collector/values.yaml_org
mode: "daemonset" | mode: ""
enabled: true | enabled: false
includeCollectorLogs: true | includeCollectorLogs: false
enabled: true | enabled: false
otlphttp: <
endpoint: http://loki-gateway.loki.svc.cluster.local/ot <
- otlphttp | - debug
repository: "otel/opentelemetry-collector-k8s" | repository: ""
tag: "0.123.0" | tag: ""
resources: | resources: {}
limits: | # resources:
cpu: 250m | # limits:
memory: 512Mi | # cpu: 250m
> # memory: 512Mi
>
インストールします。
ubuntu@k8s1:~$ helm install opentelemetry-collector --create-namespace -n opentelemetry opentelemetry-collector/
NAME: opentelemetry-collector
LAST DEPLOYED: Wed May 14 21:37:12 2025
NAMESPACE: opentelemetry
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
ubuntu@k8s1:~$ kubectl get pod -n opentelemetry
NAME READY STATUS RESTARTS AGE
opentelemetry-collector-agent-nf8gt 1/1 Running 0 28m
opentelemetry-collector-agent-xdlbh 1/1 Running 0 28m
grafanaで表示
アクセスログをjson形式にしたNGINXをデプロイしてログをgrafanaで表示します。
ubuntu@k8s1:~$ k get pod -n nginx
NAME READY STATUS RESTARTS AGE
nginx-b5dd4cf86-n2qrw 1/1 Running 0 41s
ubuntu@k8s1:~$ k -n nginx logs nginx-b5dd4cf86-n2qrw
{"time": "2025-05-14T13:21:09+00:00","client-ip": "192.168.0.53","vhost": "10.42.219.40","user": "","status": "200","protocol": "HTTP/1.1","method": "GET","path": "/health.html","req": "GET /health.html HTTP/1.1","size": "175","reqtime": "0.000","apptime": "","ua": "kube-probe/1.28","forwardedfor": "","forwardedproto": "","referrer": ""}
rancher monitoringで入れたgrafanaでデータソースを追加します。

無事収集できているようです。
