CentOS 环境下 WebLogic 监控实践
一 监控方案总览
- 管理控制台:登录 http://:7001/console,在 Servers -> -> Monitoring -> Performance 查看 JVM 堆/非堆、线程、执行队列、JDBC 连接池 等核心指标,适合日常巡检与快速定位。
- JMX + 客户端:启用 JMX,用 JConsole/VisualVM 直连或通过 WLST 脚本采集 MBean 指标,适合临时排查与批量采集。
- Prometheus + Grafana:部署 weblogic-monitoring-exporter 暴露 REST/指标,由 Prometheus 抓取、Grafana 可视化,适合长期趋势与告警。
- 企业级 APM:如 Oracle Enterprise Manager Cloud Control (OEMC)、IBM APM 等,适合大规模、多集群统一监控与治理。
二 快速上手步骤
- 控制台巡检
- 登录控制台,进入 Servers -> -> Monitoring -> Performance,关注 Heap/Non-Heap、Threads、Execute Threads、JDBC Connection Pools 等关键面板。
- 在 Deployments -> -> Monitoring 查看应用级吞吐与错误。
- JMX + JConsole/VisualVM
- 在 $DOMAIN_HOME/bin/setDomainEnv.sh 增加(示例端口 9000):
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
注:为安全起见,生产环境应启用认证与 SSL。
- 重启 Admin/受管 Server,用本地 jconsole 选择“远程”,连接 :9000。
- 也可用 WLST 脚本连接 t3://:7001 查询 ServerRuntimeMBean 的 HealthState 等。
- Prometheus + Grafana
- 部署 weblogic-monitoring-exporter,配置 WLST/REST 连接串与采集白名单。
- Prometheus 配置 job 抓取 /metrics,Grafana 导入 WebLogic 仪表盘展示 JVM、线程、连接池、请求 等指标。
三 关键指标与告警阈值建议
| 维度 |
关键指标 |
建议阈值/动作 |
| JVM |
Heap/Meta/Direct 使用、GC 次数/时间 |
堆使用持续 > 80% 触发扩容或 GC 调优;Full GC 频繁或单次 > 1s 需排查对象生命周期与引用 |
| 线程池 |
空闲线程、执行线程、等待队列长度 |
等待队列持续增长或空闲线程接近 0 时扩容线程或优化慢 SQL/外部依赖 |
| JDBC |
活跃/最大连接、等待线程、泄漏检测 |
活跃连接长期接近最大或等待线程 > 0 时增大连接池或优化 SQL/索引 |
| 请求/响应 |
吞吐、错误率、响应时间 P95/P99 |
错误率 > 1% 或 P95 突增 触发告警并定位瓶颈 |
| 主机资源 |
CPU、内存、磁盘 IO、文件句柄 |
CPU > 80% 持续、可用内存低、IO 等待高、句柄用尽均需处置(应用/系统侧) |
四 安全与连通性要点
- 启用 JMX 认证与 SSL:生产环境务必设置用户名/口令与证书,避免开放明文端口。
- 防火墙与监听:开放 7001/7002(管理/IIOP/SSL)、9000(JMX)等端口,仅放通监控网段。
- 最小权限:为监控创建 Monitors 组 用户,仅授予必要 JMX 只读权限。
- 主机解析:确保 /etc/hosts 与 DNS 正确解析 主机名 <-> IP,避免 JMX/RMI 连接异常。
- 合规审计:记录监控账号操作与指标访问日志,定期轮换口令与证书。
五 自动化巡检脚本示例 WLST
import sys
from weblogic.management.scripting import WLST
def usage():
print("Usage: java weblogic.WLST monitor.py <url> <user> <password>")
if len(sys.argv) != 4:
usage()
sys.exit(1)
url, user, pwd = sys.argv[1], sys.argv[2], sys.argv[3]
try:
connect(user, pwd, url)
cd('Servers')
for s in ls('ServerRuntimes'):
cd('ServerRuntimes/' + s)
name = get('Name')
state = get('State')
health = get('HealthState')
print(f"{name:20} State={state:8} Health={str(health)}")
cd('../..')
disconnect()
except Exception as e:
print("ERROR:", str(e))
sys.exit(2)
- 用法示例:
- 交互:java weblogic.WLST monitor.py
- 传参:java weblogic.WLST monitor.py t3://192.168.1.10:7001 weblogic Welcome1
- 可扩展采集 ExecuteThreadTotalCount、ExecuteThreadsIdle、JDBCConnectionPoolRuntime 等 MBean 属性,接入 Zabbix/Nagios/Prometheus Pushgateway。