OpsRamp Logs - Kubernetes Pod のログを取り込み制限する方法

本記事では、OpsRamp Logs で Kubernetes Pod のログを Pod 単位で取り込み制限する方法について説明します。

# 概要
OpsRamp Logs では、Pod のログを取り込むことができます。また、ログの保存ディレクトリ構造を利用し、Pod 単位で取り込み制限することが可能です。

# 設定方法
設定方法は、Infrastructure > Logs 画面左上のハンバーガーマークのLog Configurationにアクセスし、INGESTION ページの Kubernetes から参照可能です。
configMap で設定を定義し、その configMap を opsramp-agent-worker Pod に反映します。
configMap を以下のように設定します。include および exclude セクションで取り込みおよび除外対象のログファイルを定義します。Kubernetes ノード上に保存される Pod のログディレクトリ形式は、以下のようになるため namespace や Pod 名、Container 名を利用し、取り込みおよび除外設定します。
``` file: Pod logs directory
/var/log/pods/<namespace>_<Pod>/Container/<log number>.log
```

``` yaml:configMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: agent-logs-config
  namespace: opsramp-agent
  labels:
    name: agent-logs-config
data:
  log-config.yaml: |-
    inputs:
      custom_k8s:
        type: file
        include:
          - /var/log/pods/or-logs-test*/*/*.log
        exclude:
          - /var/log/pods/or-logs-test_exclude-logs*/*/*.log
        parser_type: "regex"
        regex: "^(?P<time>[^ ^Z]+Z) (?P<stream>stdout|stderr) (?P<logtag>[^ ]*) ?(?P<Message>.*)$"
        timestamp:
          layout_type: strptime
          layout: "%Y-%m-%dT%H:%M:%S.%LZ"
```

以下のコマンドで configMap を適用します。
``` shell
kubectl apply -f <configMap yaml>
```

以下のように opsramp-agent-worker Pod 用の YAML を変更します。(opsramp-agent-worker Pod の YAML は、Kubernetes インテグレーション設定から参照できます。)
volumeMounts および volumes セクションで configMap を参照するよう追記します。
``` yaml: opsramp-agent-worker
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: opsramp-agent-worker
  namespace: opsramp-agent
spec:
  updateStrategy:
    type: RollingUpdate
  minReadySeconds: 10
  selector:
    matchLabels:
      name: opsramp-agent-worker
  template:
    metadata:
      labels:
        name: opsramp-agent-worker
    spec:
      hostNetwork: true
      hostPID: true
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
        - key: node-role.kubernetes.io/control-plane
          effect: NoSchedule
      containers:
        - image: us-docker.pkg.dev/opsramp-registry/agent-images/agent
          imagePullPolicy: Always
...
          volumeMounts:
            - name: dockersocket
              mountPath: /run/containerd/containerd.sock
              readOnly: true
...
            - name: agent-log-config-volume
              mountPath: /opt/opsramp/agent/conf/log.d/log-config.yaml
              subPath: log-config.yaml
              readOnly: true
      volumes:
        - name: dockersocket
          hostPath:
            path: /run/containerd/containerd.sock
...
        - name: agent-log-config-volume
          configMap:
            name: agent-logs-config
```
``` yaml: volumeMounts
            - name: agent-log-config-volume
              mountPath: /opt/opsramp/agent/conf/log.d/log-config.yaml
              subPath: log-config.yaml
              readOnly: true
```
``` yaml: volumes
        - name: agent-log-config-volume
          configMap:
            name: agent-logs-config
```

以下のコマンドで変更を適用します。
``` shell
kubectl apply -f <opsramp-agent-worker yaml>
```


---------------------------------------
[<img width = 250 height = 200 src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344939/111de30a-4d33-aa33-5c7d-83d9015093e6.png">](https://www.vistanet.jp/knowledge-base/)