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このサンプルには、WebLogic Monitoring Exporterが含まれており、特定のWebLogic Serverインスタンスの実行時メトリックを取得し、PrometheusおよびGrafanaツールに供給することができます。
https://github.com/oracle/docker-images/tree/master/OracleWebLogic/samples/wls-K8s
Exporting Metrics from WebLogic ServerWeblogic Monitoring Exporterは監視したいWebLogic Serverインスタンスにデプロイ可能なWebアプリケーションです。Weblogic Monitoring ExporterはWebLogic Server 12.2.1.xのRESTful管理インターフェースを使ってランタイム状態やメトリックにアクセスします。
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/
Oracle® Fusion Middleware RESTful管理サービスによるOracle WebLogic Serverの管理 12c (12.2.1.2.0)WebLogic Monitoring Exporter構成や利用方法に関する詳細は、以下のエントリをご覧ください。
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
Exporting Metrics from WebLogic Serverこのエントリでは、PrometheusやGrafanaを構成し、Kubernetesクラスタで動作している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
Monitoring Using Prometheus
WebLogic Monitoring Exporterを使用して、WebLogic Serverのメトリックを取得し、Prometheusにフィードします。以前のブログエントリでは、Kuberbetesクラスタで動作している管理対象サーバにWebLogic Monitoring Exporterをデプロイして、KubernetesでWebLogic Serverインスタンスを起動および実行する方法について説明しました。WebLogic on Kubernetes, Try It!WebLogic Monitoring Exporterがデプロイされ実行されていることを確認するには、次のリンクをクリックします。
https://blogs.oracle.com/weblogicserver/weblogic-on-kubernetes%2c-try-it
https://orablogs-jp.blogspot.jp/2017/10/weblogic-on-kubernetes-try-it.html
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
上記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
- ユーザー資格証明はweblogic/weblogic1
- WebLogic Serverのメトリックの更新間隔は5秒
- Prometheusダッシュボードへアクセスするための外部ポートは32000/tcp
Start Prometheusを起動して、管理対象サーバインスタンスを監視します。
Prometheusがすべての管理対象サーバを監視していることを確認するために、以下のURLをブラウザで確認します。$ kubectl create -f prometheus-kubernetes.yml
http://[hostname]:32000カーソルのプルダウンでInsertメトリックを調べます。WebLogic Monitoring Exporter Webアプリケーションの現在の設定に基づいてメトリック名がリスト表示されます。
WebLogic Monitoring Exporterを正しく構成していることを確認するためには、以下のURLにブラウザで接続します。
http//:[hostname]:30011/wls-exporter現在の構成が下図のように表示されるはずです。
以下は対応するWebLogic Monitoring Exporterの構成ファイルです。
上記構成ファイルはWebLogic Monitoring ExporterのWARファイルに埋め込まれていました。メトリックデータの変更や追加をする場合は、単純にランディングページ(http//:[hostname]:30011/wls-exporter)に接続して[Append or Replace]ボタンをクリックし、構成ファイルをyml形式でロードします。以下はその例です(workmanager.yml)。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]
prometheusが定義するクエリを構築することで、WebLogicドメインで動作しているサーバやアプリケーション、リソースの監視・診断に必要な任意のデータを取り出すことができます。metricsNameSnakeCase: true queries: - applicationRuntimes: key: name workManagerRuntimes: prefix: workmanager_ key: applicationName values: [pendingRequests, completedRequests, stuckThreadCount]
QUERYING PROMETHEUS例えば、以下のクエリを入力すると、PrometheusはWebLogicクラスタ内で実行中のすべての管理対象サーバから現在のデータを返します。
https://prometheus.io/docs/querying/basics/
weblogic_servlet_execution_time_average > 1
Prometheusはデータに基づいてグラフも生成します。例えば、Graphタブをクリックすると、Prometheusは平均実行時間がしきい値である1秒を超過するServletの数を示すグラフを生成します。
Monitoring Using Grafana
複数のグラフを持つ可視性の高いダッシュボードを使用するには、Grafanaを使用します。以下は設定ファイル(grafana-kubernetes.yml)の例で、これを使いKubernetes環境でGrafanaを起動することができます。
Grafanaを起動して管理対象サーバを監視するには、以下のkubectlコマンドを実行します。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
http://[hostname]:31000 でGrafanaに接続できるので、ホームページにログイン(ユーザー名はadmin、パスワードはpass)すると、Grafanaのホームページが表示されます。$ kubectl create -f grafana-kubernetes.yml
GrafanaをPrometheusに接続するには、[Add Data Source] を選択し、以下の値を入力します。
Name: Prometheus
Type: Prometheus
Url: http://prometheus:9090
Access: Proxy
[Dashboards] タブを選択し、[Import]をクリックします。
これで、WebLogic Serverを監視するダッシュボードの作成準備ができたので、以下の操作を完了させます。
- ホームページ左上部のGrafanaのアイコンをクリックし、Dashboards>Newを選択
- Graphを選択し、空白スペースにDragすると、空のグラフパネルができる。
- パネル上をクリックし、editを選択すると、編集可能なパネルが開き、メトリックグラフの表示方法をカスタマイズできる。
- GraphパネルでGeneralタブを選択し、タイトルに「WebLogic Servlet Execution Average Time(WebLogicサーブレット実行平均時間)」と入力。
- Metricsタブを選択し、Panel Data SourceのプルダウンメニューでPrometheusを選択。
特定の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]をクリックして、ダッシュボードの名前を指定するだけです。
0 件のコメント:
コメントを投稿