串口管理程序conman

conman简介

conman是一个串口控制管理程序,用于支持大量的控制台,不仅支持本地串口设备,也支持远程terminal服务器。结合IPMI协议,对大量服务器的串口日志进行采集,方便进行日志分析管理。并且conman结合呃IPMI Sol方式,可以远程对服务器进行串口控制台操作,实现sysrq magic组合键获取内核core dump。

caonman官方网站ConMan

Escape(逃脱)字符

Escape字符是非常重要的字符,用于向串口发送特殊组合命令,以实现类似sysrq这样的magic按键组合。

conman默认的Escape字符是 &

重要的控制台字符:

  • &B 向控制台发送serial-break字符,这个字符组合特定指令可以实现sysrq

  • &. 断开conman连接

  • &? 显示可用的escapes字符

通过conman实现sysrq

实际上也可以通过ipmi Serial over LAN来实现: 使用以下命令构建ipmi Serial over LAN连接到服务器出A口

ipmitool -U [user] -P [password] -H [ip/hostname of bmc] -I lanplus sol activate

然后依次执行如下组合键 - 注意:大写字幕B表示serial-break字符,也就是前面所说的对于conman就是同时按下 &B。例如,这里Bc就是表示先同时按下&B,然后放开按键,马上按一下c,就能够 触发crash dump

  • Bt - 生成堆栈跟踪

  • Bm - 打印内存状态,特别是在out of memory情况,特别需要此项信息

  • Bc - 触发crash dump

注意:操作系统必须激活sysrq功能才能使得上述操作生效,否则会提示 SysRq : This sysrq operation is disabled.。请事先在操作系统执行以下命令使得sysrq功能生效:

conman设置案例

服务器配置启用内核串口设置

对于RHEL/CentOS操作系统,/etc/sysconfig/grub 设置了串口输出配置

然后执行以下指令生成grub启动配置

重启服务器后,控制台将输出到串口。

安装conman

RHEL/CentOS 发行版已经包含了conman软件包

配置conman的简单案例

请参考 ipmitool配置服务器 设置BMC访问管理账号和管理IP地址。conman将通过IPMI协议访问服务器的串口控制台。

安装conman软件包之后/etc/conman.conf是默认的配置文档,包含了大量的配置案例。

详细的设置可以参考conman设置案例(日文)

配置案例

  • /etc/conman.conf

  • /etc/conman.pswd - 这个配置文件是conman存储每个服务器对应的IPMI账号密码的文件,对于某些IDC环境,可能每台服务器设置不同的IPMI访问密码(第一列是访问IP,第二列是访问账号,第三列是访问密码),就可以使用这个配置文件:

解析:

  • server指令是设置conman的基本配置参数,包括存储日志目录,core目录,以及时间戳等

  • global表示所有console指令都会包含的公共参数,其中global log="%N.log"表示所有服务器的日志文件都按照 名字.log 来记录,也就是console name="server-0" ...记录的服务器192.168.1.10串口日志将按照命名记录为 server-0.log,并且存储在/var/log/conman目录下。

  • 每一行console ...表示连接到一台服务器的串口。注意,每个name=xxxx表示conman的一个对象命名。启动conman服务之后,就可以通过这个命令连接到对应服务器的IPMI sol接口。即要连接192.168.1.10的IPMI sol,只需要输入命令 conman server-0就可以实现。

  • 启动conman服务

启动后请使用命令systemctl status conman检查服务状态

启动服务后,可以看到系统中有conman服务对应进程

可以看到,实际上conman巧妙的使用了expect工具来实现和服务器IPMI交互

conman大规模案例

当需要监控IDC机房海量服务器的串口时,单纯启动一个conman服务进程是无法将负载分担到服务器的多处理器上。类似nginx配置,我们会针对服务器的CPU核心数启动相应数量的conman服务。例如,针对64核心的服务器,启动64个conman服务进程,每个服务进程负责数百台服务器的串口日志采集。这样,一台服务器可以充分发挥硬件性能,监控数千台甚至上万服务器。

注意每个conman服务器需要使用-p <端口号>分别使用不同端口,避免冲突(可以编写脚本批量启动):

每个配置文件,分别对应一批被监控服务器(这里案例假设使用admin账号,密码password)

上述global配置提供了共用的IPMI访问账号密码,但是同时也有部分服务器有自己特定的访问密码,例如server-2就使用密码test_pass

简化版本conman配置

参考

Last updated

Was this helpful?