25 GrafanaとPrometheusによる集中管理型の監視

PrometheusとGrafanaを使用する場合は、コンソールへのデータの送信にKubernetes以外の製品を構成できます。このデータは、Kubernetesコンポーネントのデータに加えられます。

この章の内容は次のとおりです。

Oracle HTTP Server

集中管理型のPrometheusおよびGrafanaを使用してインフラストラクチャを監視している場合は、このアプリケーションにOracle HTTP Serverのデータを送信できます。

Oracle HTTP Serverのデータを送信するには、次のステップを実行します:

Oracle HTTP Serverのステータス監視の有効化

Oracle HTTP Serverのステータス・メトリックを有効にするには:
  1. WEB_DOMAIN_HOME/config/fmwconfig/components/OHS/<component>/にあるhttpd.confファイルを編集します。
  2. 次のようなセクションのコメント・アウトを解除します:
    <Location /server-status>
        SetHandler server-status
        Require host webhost1.example.com
        #  Require ip 127
    </Location>

    Require hostRequire IPはオプションです。これらの値のいずかまたはどちらも設定しなければ、リクエストされたどの場所の統計も使用できます。Require hostをOHSサーバーを実行しているホストの名前に設定したときは、そのホストからリクエストが送信された場合にのみ、ステータス情報が収集されるようにしてください。

    また、ディレクティブExtendedStatusOnに設定できます。ただし、この設定はシステムのパフォーマンスに影響する可能性があります。

  3. 次のコマンドを使用してOracle HTTP Serverを再起動します。
    cd WEB_DOMAIN_HOME/bin
    ./stopComponent.sh ohs1
    ./startComponent.sh ohs1
  4. 次のコマンドを使用して、サーバーの統計を取得できることを確認します:
    wget http://webhost1.example.com:7777/server-status

    また、いずれかのKubernetesワーカー・ノードからのコマンドも検証してください。

Iptables/ファイアウォールの有効化

検証コマンドが機能せず、ファイアウォールが有効になっている場合、またはIptablesが実行されている場合は、トラフィックがKubernetesワーカー・ホストからWebサーバーに到達できることを確認する必要があります。

Iptablesを使用している場合は、次のコマンドを実行します:

sudo iptables -I INPUT -p tcp -m tcp --dport 9117 -j ACCEPT

Apacheエクスポータの実行

前述のコマンド(「Oracle HTTP Serverのステータス監視の有効化」および「Iptables/ファイアウォールの有効化」を参照)を使用すると、Oracle HTTP Serverのサーバー情報を公開できます。情報を公開したら、Prometheus用のApacheエクスポータを実行します。このステップでは、Prometheusから問い合せができるWebホスト上にエージェントを作成します。

エージェントを作成するには、次のステップを実行します:

Apacheエクスポータのダウンロードおよびインストール
Apacheエクスポータをインストールするには:
  1. 次のコマンドを使用して、Webホストにエクスポータをダウンロードします:
    https://api.github.com/repos/Lusitaniae/apache_exporter/releases/latest|grep browser_download_url|grep linux-amd64|cut -d '"' -f 4|wget -qi –
  2. エクスポータを抽出して、/usr/local/binなどのシステム・ディレクトリに移動します。たとえば:
    tar xvf apache_exporter-*.linux-amd64.tar.gz
    sudo cp apache_exporter-*.linux-amd64/apache_exporter /usr/local/bin
    sudo chmod +x /usr/local/bin/apache_exporter
  3. 次のコマンドを使用して、Apacheエクスポータを実行します:
    ./apache_exporter --insecure \
                      --scrape_uri=http://webhost1.example.com:7777/server-status?auto \
                      --telemetry.address=0.0.0.0:9100 \
                      --telemetry.endpoint=/metrics

    ここで、scrape_uriは、Oracle HTTP Serverのサーバーステータス・ページへのアクセスに使用するURLです。テレメトリ・アドレスには、PrometheusがOracle HTTP Serverメトリックの取得に使用するポートが含まれています

    ノート:

    このコマンドでは、現在のシェルのフォアグラウンドでエクスポータが実行されます。テストを目的とする場合には、これで十分です。本番で使用する場合は、サービスに変換し、ホストの起動時に開始されるようinit.dを介して実行する必要があります。

Prometheusオペレータへの外部ホストの追加

データを生成してPrometheusで使用できるようにしたら、データが定期的にロードされるようにPrometheusを構成する必要があります。データをロードするには:
  1. Prometheusのデプロイに使用したhelmオーバーライド・ファイルを編集し、Prometheusセクションに次の行を追加します:
    prometheus:
      service:
        nodePort: 30901
        type: NodePort
    
      prometheusSpec:
        additionalScrapeConfigs:
          - job_name: "External servers"
            static_configs:
              - targets: ["webhost1.example.com:9100","webhost2.example.com:9100"]
  2. 次のコマンドを使用して、インストールをアップグレードします:
    helm upgrade -n monitoring kube-prometheus prometheus-community/kube-prometheus-stack -f <WORKDIR>/override_prom.yaml
    http://k8worker1.example.com:30901/service-discoveryにある「Prometheus Service Monitors」ページに外部サーバーが表示されます。

Oracle Database

Oracle DatabaseからPrometheusに監視情報を送信できます。データを送信するには、Kubernetesクラスタ内にデータベース・エクスポータを作成し、それをデータベースに接続する必要があります。

ノート:

コンテナ・データベースを使用している場合は、個々のPDBではなく、コンテナ・データベースに関連付けられているサービスに接続する必要があります。

Oracle Databaseエクスポータの作成

Kubernetes内にOracle Databaseエクスポータを作成するには:
  1. dbexporter.yamlというファイルを、次の内容で作成します:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oracledb-exporter
      namespace: <PROMNS>
    spec:
      selector:
        matchLabels:
          app: oracledb-exporter
      strategy:
        type: Recreate
      replicas: 1
      template:
        metadata:
          labels:
            app: oracledb-exporter
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "9161"
            prometheus.io/path: "/metrics"
        spec:
          containers:
          - name: oracledb-exporter
            ports:
            - containerPort: 9161
              name: scrape
              protocol: TCP
            image: iamseth/oracledb_exporter:alpine
            env:
            - name: DATA_SOURCE_NAME
              value: system/<SYSPWD>@//<DB_SCAN_ADDRESS>:1521/<DB_SERVICE_NAME>
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: oracledb-exporter
      name: oracledb-exporter
      namespace: <PROMNS>
    
    spec:
      type: ClusterIP
      selector:
        app: oracledb-exporter
      ports:
      - name: scrape
        port: 9161
        protocol: TCP
        targetPort: 9161
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    
    metadata:
      labels:
        release: kube-prometheus
      name: oracledb-exporter
      namespace: <PROMNS>
    
    spec:
      endpoints:
      - honorLabels: true
        interval: 15s
        path: /metrics
        port: scrape
        relabelings:
          - action: labelmap
            regex: __meta_kubernetes_service_label_(.+)
        scheme: http
        interval: 15s
        scrapeTimeout: 10s
    
      jobLabel: oracledb-exporter
    
      namespaceSelector:
        matchNames:
        - <PROMNS>
    
      selector:
        matchLabels:
          app: oracledb-exporter
  2. 次のコマンドを使用して、デプロイメントを作成します:
    kubectl create -f ./dbexporter.yaml
  3. 次のコマンドを使用して、作成を監視します:
    kubectl get all -n <PROMNS>