许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  如何监控lmgrd进程是否存活并实现自动告警

如何监控lmgrd进程是否存活并实现自动告警

阅读数 5
点赞 0
article_banner

监控lmgrd进程是否存活,是FlexNet许可证服务器运维中最基础也最重要的任务。但真正的监控不能只看进程——进程在不等于服务在。本文提供一套从基础到进阶的监控方案,覆盖进程监控、服务可用性验证和告警配置三个层面。

一、监控的两个层面


层面检查内容目的
进程层lmgrd和vendor daemon进程是否存在确认服务进程未崩溃
服务层许可证能否正常签出/签入确认服务真正可用

只监控进程是不够的。 常见的情况是:lmgrd进程还在,但vendor daemon已经挂了。这时lmstat -a查询不到任何许可证信息,客户端报错-97,但进程监控仍然显示"正常"。

二、基础方案:进程监控脚本

最简单的脚本

bash

#!/bin/bash
# check_flexnet.sh

if ! pgrep -x "lmgrd" > /dev/null; then
    echo "WARNING: lmgrd is not running"
    # 触发告警逻辑
    exit 1
fi

echo "OK: lmgrd is running"
exit 0

完整的进程监控脚本(带vendor daemon检查)

bash

#!/bin/bash
# check_flexnet_full.sh

LMGRD_PROCESS="lmgrd"
VENDOR_PROCESS="snpslmd"  # 替换为实际的vendor daemon名称
LOG_FILE="/var/log/flexnet_monitor.log"

# 检查lmgrd
if ! pgrep -x "$LMGRD_PROCESS" > /dev/null; then
    echo "$(date): ERROR - lmgrd process not found" >> "$LOG_FILE"
    # 尝试自动重启
    systemctl start flexnet
    exit 1
fi

# 检查vendor daemon
if ! pgrep -x "$VENDOR_PROCESS" > /dev/null; then
    echo "$(date): ERROR - vendor daemon ($VENDOR_PROCESS) not found" >> "$LOG_FILE"
    # 尝试自动重启
    systemctl restart flexnet
    exit 1
fi

echo "$(date): OK - all processes running" >> "$LOG_FILE"
exit 0

配合crontab定时执行

bash

# 每5分钟检查一次
*/5 * * * * /opt/scripts/check_flexnet_full.sh

# 每2分钟检查一次(需要更高实时性的场景)
*/2 * * * * /opt/scripts/check_flexnet_full.sh

三、进阶方案:服务可用性验证(推荐)

进程监控的局限性在于:进程在,但服务可能已经不可用。 更可靠的方式是直接测试许可证签出功能。

用lmstat检查许可证状态

bash

#!/bin/bash
# check_flexnet_service.sh

LMUTIL="/opt/flexnet/lmutil"
LICENSE_FILE="/opt/flexnet/license.lic"
SERVER="27000@localhost"
VENDOR="snpslmd"

# 方法1:用lmstat检查vendor daemon状态
output=$($LMUTIL lmstat -a -c "$LICENSE_FILE" 2>&1)

if echo "$output" | grep -q "Vendor daemon status"; then
    if echo "$output" | grep -q "DOWN" || echo "$output" | grep -q "down"; then
        echo "ERROR: Vendor daemon is DOWN"
        exit 1
    fi
    echo "OK: Vendor daemon is running"
    exit 0
else
    echo "ERROR: Cannot get license status"
    exit 1
fi

实际签出一个测试许可证(最可靠的方法)

bash

#!/bin/bash
# check_flexnet_feature.sh

LMUTIL="/opt/flexnet/lmutil"
FEATURE="test_feature"  # 替换为一个实际存在的feature
SERVER="27000@localhost"

# 尝试签出测试feature
$LMUTIL lmstat -c "$SERVER" -f "$FEATURE" 2>&1 | grep -q "Users of $FEATURE:"

if [ $? -eq 0 ]; then
    echo "OK: Feature $FEATURE is available"
    exit 0
else
    echo "ERROR: Feature $FEATURE is NOT available"
    exit 1
fi
注意:签出测试许可证的方法会对许可证池产生实际占用。如果测试频率较高(如每5分钟一次),会持续消耗一个许可名额。建议选择以下替代方案之一:使用lmstat -a查询状态而不实际签出配置一个专用的测试许可证或预留一个许可给监控使用降低测试频率(如每小时一次)

四、自动重启:进程死了自动拉起来

配合systemd服务的Restart=on-failure是最简单的方式。如果监控脚本检测到进程死亡,触发systemd重启:

bash

#!/bin/bash
# check_flexnet_with_restart.sh

if ! pgrep -x "lmgrd" > /dev/null; then
    echo "$(date): lmgrd died, attempting restart..." >> /var/log/flexnet_monitor.log
    systemctl restart flexnet
    sleep 5
    if pgrep -x "lmgrd" > /dev/null; then
        echo "$(date): Restart successful" >> /var/log/flexnet_monitor.log
    else
        echo "$(date): Restart FAILED" >> /var/log/flexnet_monitor.log
    fi
fi

五、告警配置:发现异常及时通知

1. 邮件告警

bash

#!/bin/bash
# check_flexnet_with_email.sh

ALERT_EMAIL="admin@yourcompany.com"
HOSTNAME=$(hostname)

if ! pgrep -x "lmgrd" > /dev/null; then
    echo "Subject: [ALERT] FlexNet License Server Down on $HOSTNAME
    lmgrd process is not running.
    Please check immediately." | sendmail "$ALERT_EMAIL"
fi

2. 钉钉/企业微信告警(通过Webhook)

bash

#!/bin/bash
# send_dingtalk_alert.sh

WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=xxx"
HOSTNAME=$(hostname)
MESSAGE="{\"msgtype\":\"text\",\"text\":{\"content\":\"[ALERT] FlexNet License Server Down on $HOSTNAME\"}}"

if ! pgrep -x "lmgrd" > /dev/null; then
    curl -X POST -H "Content-Type: application/json" -d "$MESSAGE" "$WEBHOOK_URL"
fi

3. Prometheus + AlertManager(专业监控方案)

在Prometheus中配合node_exportertextfile收集器,可以采集并暴露许可证服务器的状态指标。

第一步:生成指标文件

编写一个脚本,定期将许可证状态写入/var/lib/node_exporter/textfile/flexnet.prom

bash

#!/bin/bash
# flexnet_exporter.sh

OUTPUT_DIR="/var/lib/node_exporter/textfile"
LMGRD_RUNNING=0
VENDOR_RUNNING=0

if pgrep -x "lmgrd" > /dev/null; then
    LMGRD_RUNNING=1
fi

if pgrep -x "snpslmd" > /dev/null; then
    VENDOR_RUNNING=1
fi

cat > "$OUTPUT_DIR/flexnet.prom" << EOF
# HELP flexnet_lmgrd_up lmgrd process status (1=up, 0=down)
# TYPE flexnet_lmgrd_up gauge
flexnet_lmgrd_up $LMGRD_RUNNING
# HELP flexnet_vendor_up vendor daemon status (1=up, 0=down)
# TYPE flexnet_vendor_up gauge
flexnet_vendor_up $VENDOR_RUNNING
EOF

第二步:配置crontab定时执行

bash

* * * * * /opt/scripts/flexnet_exporter.sh

第三步:在Prometheus中配置告警规则

yaml

groups:
  - name: flexnet_alerts
    rules:
      - alert: FlexNetLicenseServerDown
        expr: flexnet_lmgrd_up == 0
        for: 2m
        annotations:
          summary: "FlexNet License Server is down"
          severity: critical

4. Zabbix监控

Zabbix用户可以使用system.run[]键值直接执行脚本并采集返回值:

bash

# Zabbix Agent配置
UserParameter=flexnet.lmgrd,pgrep -x "lmgrd" | wc -l
UserParameter=flexnet.vendor,pgrep -x "snpslmd" | wc -l

Zabbix Server端配置触发器:

  • flexnet.lmgrd值为0时触发告警
  • flexnet.vendor值为0时触发告警

六、监控指标汇总

建议收集以下指标,用于长期运维分析和趋势判断:


指标采集方式用途
lmgrd进程状态pgrep -x lmgrd确认主进程是否存活
vendor daemon状态pgrep -x snpslmd确认核心服务是否存活
许可证使用率lmstat -a解析容量规划和采购决策
可用许可证数量lmstat -a解析判断是否需要扩容
排队用户数lmstat -a解析判断高峰期拥挤情况
端口连通性telnet 端口确认网络可达

七、注意事项

1. 频率控制

  • 监控脚本不宜执行过频。建议每2-5分钟检查一次,避免对License Server造成额外压力
  • 在高峰期(如上午9-10点),检查频率可适当降低

2. 区分计划内停机

  • 计划内维护(如系统升级、服务器重启)不应触发告警
  • 在监控脚本中增加维护模式开关:在/etc/flexnet_maintenance文件中标记维护状态,脚本检测到该文件存在时跳过告警

3. 告警风暴控制

  • 告警通知应设置冷却期(如30分钟内同一告警不重复发送)
  • 避免短时间大量告警轰炸运维人员

八、总结

监控层级方法适用场景推荐度
基础pgrep检查进程简单场景,快速部署★★★
进阶lmstat -a验证服务需要确认服务可用性★★★★★
可靠签出测试feature对可用性要求极高★★★★
专业Prometheus + AlertManager大规模运维★★★★★

核心建议:不要只用进程监控。配合lmstat -a检查vendor daemon状态,才能真正确认服务可用。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空