[Docker, WLS] Using Prometheus and Grafana to Monitor WebLogic Server on Kubernetes

原文はこちら。
https://blogs.oracle.com/weblogicserver/use-prometheus-and-grafana-to-monitor-weblogic-server-on-kubernetes

Kubernetes上でのWeblogic Serverの動作保証検証の一環として、WebLogicチームは、Kubernetes環境でWebLogic Serverクラスタのオーケストレーションのデモサンプルを作成しました。
WebLogic on Kubernetes Sample
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-K8s
このサンプルには、WebLogic Monitoring Exporterが含まれており、特定のWebLogic Serverインスタンスの実行時メトリックを取得し、PrometheusおよびGrafanaツールに供給することができます。
Exporting Metrics from WebLogic Server
https://blogs.oracle.com/weblogicserver/exporting-metrics-from-weblogic-server
https://orablogs-jp.blogspot.jp/2017/11/exporting-metrics-from-weblogic-server.html
Prometheus - Monitoring system & time series database
https://prometheus.io/
Grafana - The open platform for analytics and monitoring
https://grafana.com/
Weblogic Monitoring Exporterは監視したいWebLogic Serverインスタンスにデプロイ可能なWebアプリケーションです。Weblogic Monitoring ExporterはWebLogic Server 12.2.1.xのRESTful管理インターフェースを使ってランタイム状態やメトリックにアクセスします。
Oracle® Fusion Middleware RESTful管理サービスによるOracle WebLogic Serverの管理 12c (12.2.1.2.0)
WLS RESTful管理インタフェースについて
https://docs.oracle.com/cd/E84527_01/wls/WLRUR/overview.htm#GUID-B193E8EF-1912-48D1-8FB9-99C5ADACCC3B
Oracle® Fusion Middleware Administering Oracle WebLogic Server with RESTful Management Services 12c (12.2.1)
About the WLS RESTful Management Interface
https://docs.oracle.com/middleware/1221/wls/WLRUR/overview.htm#WLRUR111
WebLogic Monitoring Exporter構成や利用方法に関する詳細は、以下のエントリをご覧ください。
Exporting Metrics from WebLogic Server
https://blogs.oracle.com/weblogicserver/exporting-metrics-from-weblogic-server
https://orablogs-jp.blogspot.jp/2017/11/exporting-metrics-from-weblogic-server.html
このエントリでは、PrometheusやGrafanaを構成し、Kubernetesクラスタで動作しているWebLogic Serverインスタンスの監視方法をご紹介します。

Monitoring Using Prometheus

WebLogic Monitoring Exporterを使用して、WebLogic Serverのメトリックを取得し、Prometheusにフィードします。以前のブログエントリでは、Kuberbetesクラスタで動作している管理対象サーバにWebLogic Monitoring Exporterをデプロイして、KubernetesでWebLogic Serverインスタンスを起動および実行する方法について説明しました。
WebLogic on Kubernetes, Try It!
https://blogs.oracle.com/weblogicserver/weblogic-on-kubernetes%2c-try-it
https://orablogs-jp.blogspot.jp/2017/10/weblogic-on-kubernetes-try-it.html
WebLogic Monitoring Exporterがデプロイされ実行されていることを確認するには、次のリンクをクリックします。
http://[hostname]:30011/wls-exporter/metrics
メトリックデータにアクセスするために必要なWebLogicユーザー資格情報の入力を求められます(例えばweblogic/weblogic1)。メトリックページでは、WebLogic Monitoring Exporter用に構成されたメトリックを表示します。

To create a Prometheus instance in KubernetesにPrometheusインスタンスを作成するには、Prometheus構成ファイル(prometheus-kubernetes.yml)を作成する必要があります。サンプルファイルを用意しましたので、これを環境にあわせて変更してください。
docker-images/OracleWebLogic/samples/wls-K8s/prometheus/
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-K8s/prometheus
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: prometheus
  labels:
    app: prometheus
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:v1.7.1
        ports:
        - containerPort: 9090
        args:
        - -config.file=/etc/prometheus/prometheus.yml
        volumeMounts:
        - mountPath: /etc/prometheus/
          name: config-volume
#        - mountPath: /prometheus
#          name: prometheus-data
      restartPolicy: Always
      volumes:
      - name: config-volume
        configMap:
          name: prometheus-configuration
#      - name: prometheus-data
#        persistentVolumeClaim:
#          claimName: prometheus-storage
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-configuration
data:
  prometheus.yml: |-
    global:
      scrape_interval:     5s
      external_labels:
        monitor: 'my-monitor'
    scrape_configs:
    - job_name: 'kubernetes-pods'
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
        action: replace
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: pod_name
      - regex: '(controller_revision_hash|job)'
        action: labeldrop
      - source_labels: [name]
        regex: '.*/(.*)$'
        replacement: $1
        target_label: webapp
      basic_auth:
       username: weblogic
       password: weblogic1

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus-storage
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
status: {}
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
spec:
  type: NodePort
  ports:
  - port: 9090
    targetPort: 9090
    nodePort: 32000
  selector:
    app: prometheus
上記Prometheus構成ファイルの例では以下のように指定しています。
  • ユーザー資格証明はweblogic/weblogic1
  • WebLogic Serverのメトリックの更新間隔は5秒
  • Prometheusダッシュボードへアクセスするための外部ポートは32000/tcp
これらの値は皆様の特定の環境や構成を反映するために、必要に応じて変更できます。
Start Prometheusを起動して、管理対象サーバインスタンスを監視します。
$ kubectl create -f prometheus-kubernetes.yml
Prometheusがすべての管理対象サーバを監視していることを確認するために、以下のURLをブラウザで確認します。
http://[hostname]:32000
カーソルのプルダウンでInsertメトリックを調べます。WebLogic Monitoring Exporter Webアプリケーションの現在の設定に基づいてメトリック名がリスト表示されます。

WebLogic Monitoring Exporterを正しく構成していることを確認するためには、以下のURLにブラウザで接続します。
http//:[hostname]:30011/wls-exporter
現在の構成が下図のように表示されるはずです。

以下は対応するWebLogic Monitoring Exporterの構成ファイルです。
metricsNameSnakeCase: true
queries:
- applicationRuntimes:
    key: name
    keyName: app
    componentRuntimes:
      type: WebAppComponentRuntime
      prefix: webapp_config_
      key: name
      values: [deploymentState, contextRoot, sourceInfo, openSessionsHighCount, openSessionsCurrentCount, sessionsOpenedTotalCount, sessionCookieMaxAgeSecs, sessionInvalidationIntervalSecs, sessionTimeoutSecs, singleThreadedServletPoolSize, sessionIDLength, servletReloadCheckSecs, jSPPageCheckSecs]
      servlets:
        prefix: weblogic_servlet_
        key: servletName
        values: [invocationTotalCount, reloadTotal, executionTimeAverage, poolMaxCapacity, executionTimeTotal, reloadTotalCount, executionTimeHigh, executionTimeLow]
- JVMRuntime:
    key: name
    values: [heapFreeCurrent, heapFreePercent, heapSizeCurrent, heapSizeMax, uptime, processCpuLoad]
上記構成ファイルはWebLogic Monitoring ExporterのWARファイルに埋め込まれていました。メトリックデータの変更や追加をする場合は、単純にランディングページ(http//:[hostname]:30011/wls-exporter)に接続して[Append or Replace]ボタンをクリックし、構成ファイルをyml形式でロードします。以下はその例です(workmanager.yml)。
metricsNameSnakeCase: true
queries:
- applicationRuntimes:
    key: name
    workManagerRuntimes:
      prefix: workmanager_
      key: applicationName
      values: [pendingRequests, completedRequests, stuckThreadCount]
prometheusが定義するクエリを構築することで、WebLogicドメインで動作しているサーバやアプリケーション、リソースの監視・診断に必要な任意のデータを取り出すことができます。
QUERYING PROMETHEUS
https://prometheus.io/docs/querying/basics/
例えば、以下のクエリを入力すると、PrometheusはWebLogicクラスタ内で実行中のすべての管理対象サーバから現在のデータを返します。
weblogic_servlet_execution_time_average > 1

Prometheusはデータに基づいてグラフも生成します。例えば、Graphタブをクリックすると、Prometheusは平均実行時間がしきい値である1秒を超過するServletの数を示すグラフを生成します。

Monitoring Using Grafana

複数のグラフを持つ可視性の高いダッシュボードを使用するには、Grafanaを使用します。
以下は設定ファイル(grafana-kubernetes.yml)の例で、これを使いKubernetes環境でGrafanaを起動することができます。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: grafana
  labels:
    app: grafana
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:4.4.3
        ports:
        - containerPort: 3000
        env:
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: pass
#        volumeMounts:
#        - mountPath: /var/lib/grafana
#          name: grafana-data
      restartPolicy: Always
      volumes:
#      - name: grafana-data
#        persistentVolumeClaim:
#          claimName: grafana-data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  name: grafana-data
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Mi
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  type: NodePort
  ports:
  - port: 3000
    targetPort: 3000
    nodePort: 31000
  selector:
    app: grafana
Grafanaを起動して管理対象サーバを監視するには、以下のkubectlコマンドを実行します。
$ kubectl create -f grafana-kubernetes.yml
http://[hostname]:31000 でGrafanaに接続できるので、ホームページにログイン(ユーザー名はadmin、パスワードはpass)すると、Grafanaのホームページが表示されます。

GrafanaをPrometheusに接続するには、[Add Data Source] を選択し、以下の値を入力します。
Name: Prometheus
Type: Prometheus
Url: http://prometheus:9090
Access: Proxy

[Dashboards] タブを選択し、[Import]をクリックします。

これで、WebLogic Serverを監視するダッシュボードの作成準備ができたので、以下の操作を完了させます。
  1. ホームページ左上部のGrafanaのアイコンをクリックし、Dashboards>Newを選択
  2. Graphを選択し、空白スペースにDragすると、空のグラフパネルができる。
  3. パネル上をクリックし、editを選択すると、編集可能なパネルが開き、メトリックグラフの表示方法をカスタマイズできる。
  4. GraphパネルでGeneralタブを選択し、タイトルに「WebLogic Servlet Execution Average Time(WebLogicサーブレット実行平均時間)」と入力。
  5. Metricsタブを選択し、Panel Data SourceのプルダウンメニューでPrometheusを選択。
空のMetric参照フィールドをクリックすると、Prometheusの場合と同様に、WebLogic Monitoring Exporterで設定されたすべてのメトリックを引き込みます。 Prometheusの例で指定したweblogic_servlet_execution_time_average> 1というクエリを入力すると、クラスタ内のすべての管理対象サーバ上で平均実行時間が1秒を超えるすべての利用可能なServletのデータが生成されてグラフとして表示されます。 各色は特定のPodとServletの組み合わせを表します。

特定のPodのデータを表示するには、対応する凡例をクリックします。これにより、他のPodのデータはグラフからすべて削除され、その凡例は強調表示されなくなります。データを追加するには、シフトキーを押して任意の凡例をクリックします。リセットするには、もう一度同じ凡例をクリックすると、他のすべてのグラフがグラフに再表示されます。
凡例をカスタマイズするには、Legend Formatフィールドで目的の値をクリックします。 例えば以下の値をクリックした場合、Grafanaはカスタマイズされた凡例を表示し始めます。グラフをクリックすると、選択した時間のすべての値が表示されます。
{{pod_name}} :appName={{webapp}} : servletName={{servletName}}

Graph→Legendタブを選択すると、凡例をさらにカスタマイズできます。例えば、凡例の配置を移動したり、最小値、最大値、平均値などを表示することができます。
Graph→Axesタブを選択すると、単位を対応するメトリックデータに切り替えることができます。この例では、時間(ミリ秒)です。
Grafanaはアラートツールも提供しています。例えば、指定した条件にアラートを設定できます。下の例では、Servletの平均実行時間が100ミリ秒を超えると、Grafanaはアラートを送出し、管理者に電子メールを送信します。

最後に、Prometheusのデータ収集間隔と同じリフレッシュ間隔である5秒ごとにグラフをリフレッシュする必要があります。また、データを監視する時間範囲をカスタマイズすることもできます。
そのためには、作成したダッシュボードの右上隅をクリックする必要があります。デフォルトでは、現在の時刻までの過去6時間のメトリックを表示するように設定されているので、必要な変更を行います。例えば、5秒ごとに更新してApplyをクリックします。

完了したら、画面の左上部にある[Save]をクリックして、ダッシュボードの名前を指定するだけです。

Summary

WebLogic Serverには豊富な一連のメトリックが用意されており、このメトリックはWebLogic Server Administration ConsoleやMonitoring Dashboardなどのよく知られたツールを使用して監視できます。これらのツールを使って、KubernetesにデプロイされているWebLogic Serverで実行されているWebLogic Serverインスタンス、アプリケーション、およびリソースを監視できます。このコンテナ・エコシステムにおいて、Kubernetes上で実行されているWebLogic Serverインスタンスのクラスタからメトリックをエクスポートおよび監視する別の方法をPrometheusやGrafanaのようなツールが提供します。また、こうしたツールを使うと、ドメインを再起動せずに、監視データを簡単に収集、アクセス、表示、カスタマイズすることができますし、さらにアラートを作成し、関係者に通知を簡単に送信することができます。是非使い始めてください。きっと気に入っていただけることでしょう!

0 件のコメント:

コメントを投稿