OpenShift 上の JBoss EAP の統計情報を Prometheus で確認する

結構苦労したのですが、自分のOpenShift local 環境で JBoss EAP の統計情報を Prometheus で確認した際の作業メモを整理します。 設定手順としての一例になるかと思いますので参考になれば幸いです。


事前準備

  • 任意のプロジェクトを作成します。
oc new-project eapdemo


  • テンプレートを取り込みます。
oc_project="$(oc project -q)"

for resource in \
  eap74-basic-s2i.json
do
  oc -n "$oc_project" create -f \
  https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/templates/${resource} 
done


JBoss EAP 環境の用意

  • eap74-basic-s2i テンプレートを利用しながら QuickStarts の kitchensink アプリをデプロイします。(時間が掛かるので暫く待機します)

    (補足)最後の2行で JBoss EAP の統計情報を取得する機能を有効にしています。この定義によって 9799 Port を用いた JMX Exporter が動作します。
oc new-app --template=eap74-basic-s2i \
 -p IMAGE_STREAM_NAMESPACE=openshift \
 -p SOURCE_REPOSITORY_URL="https://github.com/jboss-developer/jboss-eap-quickstarts" \
 -p SOURCE_REPOSITORY_REF=openshift \
 -p CONTEXT_DIR=kitchensink \
 -e AB_PROMETHEUS_ENABLE=true \
 -e JAVA_OPTS_APPEND=-Dwildfly.statistics-enabled=true


  • JBoss EAP の起動ログに以下の2つのメッセージが出力されていることを確認します。
wildfly.statistics-enabled = true
java.class.path = /opt/eap/jboss-modules.jar:/opt/jboss/container/jolokia/jolokia.jar:/opt/jboss/container/prometheus/jmx_prometheus_javaagent.jar


  • kitchensink アプリが動作することを確認します。


JBoss EAP の統計情報を監視するための設定

  • 9799 ポートを利用した JMX Exporter 用 Service を登録します。
oc apply -f - << EOF
apiVersion: v1
kind: Service
metadata:
  labels:
    app: monitor_sample
  name: eap-app-metrics
  namespace: "$oc_project"
spec:
  selector:
    deploymentConfig: eap-app
  ports:
  - name: metrics
    port: 9799
    protocol: TCP
    targetPort: 9799
EOF


  • OpenShift のモニター機能を有効にするために ConfigMap を作成します。

    (補足) cluster-monitoring-config が存在しない場合は、edit の代わりに create を実行します。
oc -n openshift-monitoring edit configmap cluster-monitoring-config


  • 以下のように enableUserWorkload: true 定義を追加し、保存します。
apiVersion: v1
data:
  config.yaml: |
    enableUserWorkload: true


  • 上記設定を実施後にモニター機能を処理する各 Pod が起動していることを確認します。

    (補足)環境によって prometheus-user-workload-1 や thanos-ruler-user-workload-1 が存在することがあります。
$ oc -n openshift-user-workload-monitoring get pod
NAME                                  READY   STATUS    RESTARTS        AGE
prometheus-operator-c7bdc5c48-49lhp   2/2     Running   8               8d
prometheus-user-workload-0            6/6     Running   24              8d
thanos-ruler-user-workload-0          3/3     Running   22 (3h6m ago)   8d


  • 利用しているユーザーへロールを付与します。

     (補足)ユーザー名は適宜変更してください。
oc policy add-role-to-user monitoring-rules-view <<ユーザー名>> -n "$oc_project"
oc policy add-role-to-user monitoring-rules-edit <<ユーザー名>> -n "$oc_project"
oc policy add-role-to-user monitoring-edit <<ユーザー名>> -n "$oc_project"


  • ServiceMonitor 定義を登録します。

    (補足)Service 登録時に定義したラベル app: monitor_sample を指定し、モニター対象の Service を特定する(マッチングする)ことが重要となります。
oc apply -f - << EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: monitor
  namespace: "$oc_project"
spec:
  endpoints:
  - port: metrics
  selector:
    matchLabels:
      app: monitor_sample
EOF


JBoss EAP の統計情報を確認

  • OpenShift の Web コンソールへログインし、Administrator パースペクティブへ切り替え、[監視] -> [ターゲット] メニューへ遷移します。


  • 指定した ServiceMonitor 名と Namespace で以下のような一覧が出力されていることを確認します。(少し待機していると表示されるようになります)
http://10.xxx.xxx.xxx:9799/metrics    ServiceMonitor  monitor  アップ     Namespace  eapdemo  進行中  240.5 ms



  • カスタムクエリー欄へ jboss_undertow_active_sessions のような項目名を入力すると以下のようなグラフに表示されることを確認します。


まとめ

以上のような手順で JBoss EAP の統計情報が Prometheus で確認することができました。あとは Prometheus の使い方を覚えると良い感じで統計情報を可視化することが可能になります。