Advertisement

第六章 玩真的,监控生产环境(一)

阅读量:

在第五章部署的Centreon尽管具备了基础监控功能,但仅能实现对远程主机存活状态的基本检测,在实际应用中仍存在明显局限性。因此,在构建适用于真实场景的监控平台时仍需补充完善各项功能与配置细节。具体而言:(1) 监控范围将涵盖主机资源、服务运行状态以及逻辑层面的各种指标;(2) 告警机制不仅会通过显示屏等传统媒介进行通知还会整合邮件系统与短信平台以实现多维度预警;(3) 权限管理方面不仅明确了系统管理员与其他技术人员的责任分工还会对不同操作人员的能力范围进行严格划分;(4) 系统可靠性方面将重点针对潜在故障点进行全面排查以确保系统的稳定运行;(5) 在应急响应方面将完善数据备份方案并制定系统的恢复与迁移流程以最大限度减少服务中断的影响

确定监控范围

主机资源监控涉及以下指标:系统资源占用情况(在运行top命令时观察CPU使用状态)、磁盘存储利用情况、内存占用比例(基于Linux系统,在swap分区进行监控即可)、磁盘I/O操作频率以及网络连接数量等信息。
服务监控关注两点:端口存活状态以及当前运行中的进程数目。
逻辑监控的核心在于模仿真实用户的访问行为(例如网页浏览请求)。若仅依赖于端口存活状态及当前运行中的进程数目来进行分析,则无法全面反映实际情况;因此建议在每个页面文件中部署一个简单的数据库查询功能(此功能的功能即用于实时判断整个应用和服务的状态),从而实现对应用及数据库运行状况的整体监督。

告警工具准备

采用多样化的故障告警方式以应对各种需求是企业常用的做法之一。
通常主要分为付费和免费两种类型。
最初采用的是基于邮件和短信的基本通信渠道。
其中短信服务需付费订阅,
每条短信大概收费0.07元。
在尝试多个不同的短信服务提供商时,
发现其服务品质各有差异。
性能较好的通道可能会出现一定的延迟,
但总体表现较为理想。
随后转向使用微信和钉钉进行通知,
其中微信操作较为复杂,
需要先申请一个合适的公众号账号才能正常运行。
目前重点介绍了短信告警功能以及钉钉集成方案。

钉钉告警

实话实说, 钉钉报警确实可靠而且迅速响应故障. 几乎不需要等待时间, 并且完全免费使用. 因此, 钉钉是一款值得信赖的故障告警工具. 按照以下流程操作即可完成故障告警设置.

首先 建立一个钉钉群组 并将其设为接收报警信息的工作群组。随后 点击进入成员管理界面 选择需要接收报警信息的人 添加到该群组中。

在这里插入图片描述

注意,必须创建钉钉讨群组才可以继续下边的步骤。

第二步,创建钉钉群机器人。进入群设置界面,鼠标点击“智能群助手”。

在这里插入图片描述

钉钉群主配备了名为"小钉"的默认机器人,并规定该机器人不具备发送故障告警信息的功能;因此,在这种情况下需要执行额外操作以实现功能扩展

在这里插入图片描述

选择“自定义 通过webhook接入提供自定义服务”。

在这里插入图片描述

点击按钮“添加”,需要对其中的内容进行编辑或者输入。

在这里插入图片描述

完成

webhook

token

完成

单击【完成

在这里插入图片描述

第三步,在监控系统上创建钉钉告警调用脚/usr/bin/ding.py,其内容如下:

复制代码
    api_url = "https://oapi.dingtalk.com/robot/send?access_token=f53546b6b015e0bd18e7b9401ee672b67c7eb460da9f601d2de65fa5
    #!/usr/bin/python
    
    import requests
    import json
    import sys
    import os
    
    headers = {'Content-Type': 'application/json;charset=utf-8'}
    api_url = "https://oapi.dingtalk.com/robot/send?access_token=17e61c303bdb66ae5b20247d5a6fa294dc992c09532c13f5951035df66b334ec"
     
    def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                 "18801028188"
            ],
            "isAtAll": False
        }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
     
    if __name__ == '__main__':
       text = sys.argv[1]
       msg(text)
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

给文件/usr/bin/ding.py可执行权限,指令为“chomd +x /usr/bin/ding.py”。

第四阶段的任务是检查钉钉群机器人能否正常传输信息。
在监控平台上运行以下命令:
通过监控系统观察dingding团队是否会成功接收所发送的通讯数据:

复制代码
    /usr/bin/ding.py  "I am dingding robot" 18801028188
    
    
      
    
    代码解读
在这里插入图片描述

遇到问题:系统缺少Python模块requests。简单来说,通过运行命令yum install python-requests -y就能完成这个Python模块的安装。最后一步操作:运行钉钉测试脚本文件/ding.py,并输入命令行参数'I am dingding robot'以及18801028188号码(可省略最后一个参数)。

在这里插入图片描述

收到测试指定的消息,钉钉群自定义机器人满足要求。

告警整合进centreon

整合钉钉告警功能或短信告警功能,实质上是Centroen编写了一段手动书写的程序,并附加了相关参数;这种宏被系统称为'宏'。此整合操作主要在Web管理界面中执行,请不要鼓励通过命令行界面手动修改相关内容。

以管理员权限登录后台,鼠标选取“配置(齿轮图标)”

在这里插入图片描述

主机监控

在配置页面中的【主机监控

在这里插入图片描述

◎主机告警项手动输入命令名“notify-host-by-ding”,命令行的完整内容如下:

复制代码
    /usr/bin/ding.py  "***** centreon Notification *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nGroup: $HOSTGROUPNAMES$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" "[nagios]** $NOTIFICATIONTYPE$ Host Alert: $HOSTADDRESS$-$HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
    
    
      
    
    代码解读

在服务监控界面中直接输入命令名称'notify-service-by-ding',完整的命令行配置如下:

复制代码
    /usr/bin/ding.py  "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nGroups: $HOSTGROUPNAMES$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n\nService_perfdata: $SERVICEPERFDATA$" "[nagios]** $NOTIFICATIONTYPE$ Service Alert: $HOSTADDRESS$-$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    
    
      
    
    代码解读

完成之后,请您在MySQL客户端系统中运行以下命令:select command_name,command_line from centreon.command where command_name like '%ding%';

在这里插入图片描述

根据查询结果分析显示

第一步,在管理员账户下设置相关参数,并对账号进行主机监控提醒指令及服务监控提醒指令的配置。

在这里插入图片描述

请特别注意,在主机通知与服务通知之间不要混淆两者。由于它们的参数有所区别,请参考前面的输入信息

第二步,添加一个主机,并把告警通知与联系人(admin)关联起来。

在这里插入图片描述

第3步,在主机上配置服务监控设置的同时,将告警通知与行政人员联系(admin)建立关联。

在这里插入图片描述

第三步骤中将执行Poller配置输出操作。因为主机配置发生了变更的原因,在此过程中特定的Poller配置项"Conf Changed"会被标记为以红色字体显示并带有"Yes"的提示。

在这里插入图片描述

接着勾选actions四个复选框,如下图所示。

在这里插入图片描述

鼠标点击按钮“Export”,可在页面下部点开加号,查看控制台输出。

在这里插入图片描述

根据上文的输出结果可以看出,在数据库中存在多个命令用于提取数据并将其保存至相关文本文件。

第五步,打开文件/etc/centreon-engine/commands.cfg,观察其变化。

在这里插入图片描述

观察输出结果发现新增的内容确实不少,并且相较于手动操作而言,这种方式更为稳定。由于 command_line 命令行是一行完整的指令串,在使用文本编辑器进行复制时容易出现错误或遗漏。

短信告警

通常情况下,没有任何专门配置的服务器能够直接向手机发送短信. 若要实现这一目标,则需要向短信服务提供商支付费用. 一些用户则利用飞信等类似工具来达成这一目标(个人认为对于运营网站而言,这种方式并不十分靠谱). 过去几年间,在某些情况下是可以申请短信通道服务的. 但在2005年之后, 这一门槛显著提升. 一旦完成付费流程, 短信服务商会为你提供接收短信的入口以及必要的加密关键字;接着我们可以通过编写简单的脚本实现发短信的功能. 以下是我的服务器用perl写的脚本:

复制代码
    #!/usr/bin/perl -w
    use strict;
    use LWP::Simple;
    use URI::Escape;
    use Digest::MD5;
     
    my ($mobile, $content) = @ARGV;
    my $log_control = 1;
    my $key = 'Ysdbyhd6T';
    my $souce_content = substr($mobile, 0, 8) . substr($mobile, -10, 10) . $key;
    my $md5 = Digest::MD5->new;
    $md5->add($souce_content);
    my $result_conent = uc($md5->hexdigest);  
     
    my $url = "http://http.asp.sh.cn/MT.do?Username=sery&Password=([-BVG'0&Mobile=$mobile&Content=$content&Keyword=$result_conent";
    my $result = get $url;
    if($log_control) {
     my $fh;
     open($fh, '>> /var/log/sms.log') or die "can't open log: $!";
     print $fh join(' ', time, $result, "\n");
     close $fh;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

我的 key = ‘Ysdbyhd6T’’ 是由短信服务商提供的验证密钥。 我的 url=”……” 包含了短信服务商提供的用户名、密码以及其访问接口的完整地址(URL)。
我们将此文件放置在 /usr/local/bin/ 目录下,并命名为 sms_send.pl 。通过使用 chmod +x /usr/local/bin/sms_send.pl ,我们赋予了其执行权限。
这个脚本可以在各种Unix/Linux系统中正常运行,并用于发布Nagios的报警短信。如果有人想使用此脚本发送短信,则只需修改密钥值和URL值即可直接使用。

接下来就是验证是否可以发送短信,执行命令行 /usr/local/bin/sms.pl 13300108888 "It is a test" ,回车后数秒钟,你的手机应该能收到带有内容“It is a test”的短信息。为了保证短信服务的可靠性,我做了一个策略:每天下午6点定时给我发一个通知短信;告诉我短信发送是正常的,也是该下班回家了。做法:执行 crontab –e 然后输入行 00 18 * * * /usr/local/bin/sms.pl 13300108888 "It is Ok” 。

短信告警整合到Centreon与钉钉整合基本一样,这里不再赘述。

邮件告警

邮件告警是Centreon中最主要且 simplest 的告警方式。该系统已预设配置以发送邮件进行报警。同样无需在 web 管理界面进行操作来设置相关参数。在Centreon的配置文件/etc/centreon/commands.cfg里有如下设置项:

复制代码
    define command {
    command_name                   host-notify-by-email
    command_line                   /bin/sh -c '/usr/bin/printf "%b" "***** centreon Notification *****\n\nType:$NOTIFICATIONTYP
    E$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\nDate/Time: $DATE$" | /bin/mail -s "Host $
    HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$'
    }
    
    define command {
    command_name                   service-notify-by-email
    command_line                   /bin/sh -c '/usr/bin/printf "%b" "***** centreon Notification *****\n\nNotification Type: $N
    OTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $DAT
    E$ Additional Info : $SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$
     **" $CONTACTEMAIL$'
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

检查电子邮件服务是否正常工作。在安装了ISO文件的Centreon系统中,默认配置使用Postfix作为电子邮件服务器。在完成域名解析配置并正确设置Email MX记录的情况下,简单的修改包括编辑系统的/etc/hosts文件以及/etc/postfix/main(cf)配置文件。之后重启Postfix服务,并使用'mail'命令验证是否存在正常发送能力。假使输出提示不存在'mail'功能,则可通过执行命令'‘yum install mailx whois’'来实现必要的软件更新与配置修复工作;通过/var/log/maillog目录下的日志文件可以观察到邮件发送的状态

在这里插入图片描述

2) 将邮件通知命令与联系人相关联。每个联系人均可关联多个告警通知命令,例如包含邮件告警、短信告警以及钉钉告警等。

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~