0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROSAからCloudWatchへのログ転送コストを抑える① - Inputで転送対象を絞る

0
Last updated at Posted at 2026-09-08

はじめに

みなさん、こんにちは。

ROSA(Red Hat OpenShift Service on AWS)では、OpenShift Loggingを利用してApplicationログやInfrastructureログなどをAmazon CloudWatch Logsへ転送できます。

CloudWatch Logsはログの取り込み量や保存量などに応じて料金が発生するため、ログの出力量が多い環境ではコストの増加につながります。

そのため、CloudWatchへ転送する必要のないログをROSA側で減らすこともコスト削減の方法の1つです。

OpenShift LoggingのClusterLogForwarderでは、大きく以下の2つの方法でログを減らせます。

  1. Inputで収集対象となるログを絞る
  2. Filterでログレコードやログレコード内のフィールドを削除する

Filterでは、ログレコード自体を除外するdropや、不要なフィールドを削除するpruneが利用できます。

本記事では、Part①としてInputを利用して転送対象のログを絞り込む方法を紹介します。
Part②では、droppruneを利用したログ削減方法に加えて、実運用でどのようにログ転送量をチューニングしていくかについても考察しています。
ROSAからCloudWatchへのログ転送コストを抑える② - Filterで不要なログを削減する #AWS - Qiita

※本記事はRed Hat OpenShift Logging 6.6を前提としています。

ClusterLogForwarderのInput

ClusterLogForwarderではInputでCollectorが収集するログを指定します。

OpenShift Logging 6.6で利用できるInput Typeは以下の通りです。

Input Type 内容
application ユーザーがデプロイしたApplication Containerのログ
infrastructure Infrastructure ComponentやNodeのログ
audit Kubernetes API ServerやOpenShift API ServerなどのAuditログ
receiver HTTPまたはSyslogで受信するログ

このうちapplicationinfrastructureauditはPipelineのinputRefsから直接指定できます。

receiverはHTTPまたはSyslogでログを受信するInputです。今回はROSA上で発生するログをCloudWatchへ転送することが目的なので、以降ではapplicationinfrastructureauditについて説明します。

Input Typeの詳細は公式ドキュメントを確認してください。

Applicationログを絞る

ApplicationログはNamespace、Container、Pod Labelなどを条件に収集対象を絞れます。

Namespaceで絞る

例えば以下のNamespaceがあるとします。

app-prod
app-dev
app-test

app-prodだけを対象とする場合は、includesにNamespaceを指定します。

spec:
  inputs:
    - name: prod-application
      type: application
      application:
        includes:
          - namespace: app-prod

  pipelines:
    - name: cloudwatch-pipeline
      inputRefs:
        - prod-application
      outputRefs:
        - cloudwatch

PipelineのinputRefsには、作成したprod-applicationを指定します。

反対に、特定のNamespaceを除外したい場合はexcludesを利用します。

spec:
  inputs:
    - name: application-exclude-test
      type: application
      application:
        excludes:
          - namespace: app-test

上記ではapp-testのログを収集対象から除外します。

ちなみにincludesexcludesを両方設定した場合はexcludesが優先されます。

Containerで絞る

Container名でも同じように指定できます。

例えばapp-prod Namespaceのapplication Containerだけを対象にする場合は以下のように設定します。

spec:
  inputs:
    - name: application-container
      type: application
      application:
        includes:
          - namespace: app-prod
            container: application

特定のContainerだけ除外する場合は以下のように設定します。

spec:
  inputs:
    - name: application-without-sidecar
      type: application
      application:
        excludes:
          - container: sidecar

NamespaceやContainerの指定ではパターンも利用できます。

Pod Labelで絞る

Pod Labelでも収集対象を絞れます。

例えば以下のLabelが付いたPodを対象にします。

metadata:
  labels:
    logging: cloudwatch

ClusterLogForwarderは以下のように設定します。

spec:
  inputs:
    - name: cloudwatch-application
      type: application
      application:
        selector:
          matchLabels:
            logging: cloudwatch

より細かい条件を指定する場合はmatchExpressionsも利用できます。

spec:
  inputs:
    - name: cloudwatch-application
      type: application
      application:
        selector:
          matchExpressions:
            - key: env
              operator: In
              values:
                - prod
                - staging

図の例ではenv=prodまたはenv=stagingのLabelをもつPodを指定しています。
matchExpressionsで利用できるOperatorは以下の4種類です。

  • In
  • NotIn
  • Exists
  • DoesNotExist

ExistsまたはDoesNotExistを利用する場合はvaluesを空にします。

Infrastructureログを絞る

Infrastructureログは以下の2つのsourceに分かれています。

  • container
  • node

containerdefaultkube*openshift* NamespaceのWorkloadから出力されるContainerログ、nodeはCluster NodeのJournalログです。

sourcesを指定しない場合は両方が収集されます。

例えばNodeのJournalログだけを収集する場合は以下のように設定します。

spec:
  inputs:
    - name: infrastructure-node
      type: infrastructure
      infrastructure:
        sources:
          - node

Containerログだけの場合は以下です。

spec:
  inputs:
    - name: infrastructure-container
      type: infrastructure
      infrastructure:
        sources:
          - container

Namespace単位ではInputで絞れない

ここでApplicationログとの違いがあります。

Infrastructureのcontainerには、defaultopenshift-*などのNamespace上で動作するWorkloadのログが含まれます。

ただし、Infrastructure InputではApplication InputのようにNamespace単位で収集対象を指定することはできません。Inputで指定できるのはcontainerまたはnodeのsource単位です。

そのため、特定のInfrastructure Namespaceだけを除外したい場合はFilterを利用します。

Filterを利用したNamespace単位の除外方法については、次回の記事で紹介します。

Auditログを絞る

Auditログには以下のsourceがあります。

  • kubeAPI
  • openshiftAPI
  • auditd
  • ovn

sourcesを指定しない場合は、すべてのAudit sourceが収集されます。

例えばKubernetes API ServerとOpenShift API ServerのAuditログだけを対象にする場合は以下のように設定します。

spec:
  inputs:
    - name: api-audit
      type: audit
      audit:
        sources:
          - kubeAPI
          - openshiftAPI

Auditログを収集する場合は、CollectorのServiceAccountにcollect-audit-logs権限が必要です。

oc adm policy add-cluster-role-to-user collect-audit-logs \
  system:serviceaccount:<namespace>:<service_account_name>

公式ドキュメントでは、権限を付与する前にauditinputRefsへ追加するとCollectorのDaemonSetが削除され、ログ収集が停止すると記載されています。

Auditログを追加する場合は、先に権限を設定する必要があります。

InputとFilterの違い

ここまで紹介したInputでは、ログの種類やNamespace、Container、sourceなどを条件に収集対象を絞れます。

ただし、Inputで指定できる条件はログ種別によって異なります。

ログ Inputで絞れる単位
Application Namespace / Container / Pod Label
Infrastructure container / node
Audit kubeAPI / openshiftAPI / auditd / ovn

InfrastructureログをNamespace単位で絞る場合など、Inputでは指定できない条件についてはFilterを利用します。

また、例えばApacheから以下のログが出力されている場合、

GET /health 200
GET /api/users 200
ERROR database connection failed

/healthだけを除外するといったログ内容によるフィルタリングもFilterを利用します。

OpenShift Logging 6.6では、dropを利用して条件に一致したログレコードを除外できます。

また、pruneを利用するとログレコード自体は残したまま、不要なフィールドを削除できます。

こちらは次回の記事で紹介します。

まとめ

今回はClusterLogForwarderのInputを利用して、CloudWatchへ転送するログの対象を絞る方法を紹介しました。

ApplicationログではNamespace、Container、Pod Labelを条件として対象を限定できます。

Infrastructureログではcontainernode、AuditログではkubeAPIopenshiftAPIauditdovnから必要なsourceを指定できます。

一方、InfrastructureログをNamespace単位で絞る場合など、Inputだけでは指定できない条件もあります。

その場合はdropなどのFilterを組み合わせてログを除外します。

次回はdroppruneを利用して、

  • InfrastructureログをNamespace単位で除外する
  • /healthなど特定のログレコードを除外する
  • 不要なフィールドを削除する

といった方法を紹介します。

それでは、また!

参考文献

Red Hat OpenShift Logging 6.6
https://docs.redhat.com/en/documentation/red_hat_openshift_logging/6.6/

Amazon CloudWatch 料金
https://aws.amazon.com/jp/cloudwatch/pricing/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?