如何用Python脚本来监控服务器(三)——自动化监控方式之Saltstack

甘老师2020-07-201683

上期为大家分享了《如何用Python脚本来监控服务器——自运化监控方式之SSH》,今天为大家带来《如何用Python脚本来监控服务器(三)——自动化监控方式之Saltstack》



saltstack模式:

优点:快速,开发成本低

缺点:依赖saltstack


自动化监控Saltstack方式实战

3.1 Saltstack的环境说明

Saltstack的架构是客户端与服务型模型(C/S)

Saltstack安装:http://docs.saltstack.cn/topics/installation/index.html#installation



3.2 saltstack的安装

Salt-master的安装配置:


[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[root@localhost ~]# /etc/init.d/iptables stop

[root@localhost ~]#  yum install salt-master

[root@localhost ~]# cat  /etc/salt/master

# The address of the interface to bind to:

interface: 192.168.100.40

[root@localhost ~]#  /etc/init.d/salt-master start


总结如下:


Master: yum install salt-master

       Master准备:

            a. 配置文件,监听本机IP

                vim /etc/salt/master

                interface: 本机IP地址

            b. 启动master

                /etc/init.d/salt-master start


salt-minion的安装配置:


[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[root@localhost ~]# /etc/init.d/iptables stop

[root@localhost ~]# cat /etc/salt/minion

# Set the location of the salt master server. If the master server cannot be

# resolved, then the minion will fail to start.

master:  192.168.100.40                           

[root@localhost ~]# /etc/init.d/salt-minion start


总结如下:


Slave:  yum install salt-minion

        Slave准备:

            a. 配置文件,连接那个master

                vim /etc/salt/minion

                master: 远程master地址

            b. 启动slave

                /etc/init.d/salt-minion start


3.3服务端配置认证


[root@localhost ~]# salt-key -L

Accepted Keys:

Denied Keys:

Unaccepted Keys:

192.168.100.136

Rejected Keys:

[root@localhost ~]# salt-key -a 192.168.100.136

The following keys are going to be accepted:

Unaccepted Keys:

192.168.100.136

Proceed? [n/Y] y

Key for minion 192.168.100.136 accepted.

[root@localhost ~]# salt-key -L

Accepted Keys:

192.168.100.136

Denied Keys:

Unaccepted Keys:

Rejected Keys:



3.4 saltstack的测试(在服务端上进测试)


[root@localhost ~]# salt '192.168.100.136' cmd.run 'df -h'

192.168.100.136:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda2        97G  687M   91G   1% /

    tmpfs           427M   92K  427M   1% /dev/shm

    /dev/sda1       194M   34M  151M  19% /boot

    /dev/sda5        20G  172M   19G   1% /home

    /dev/sda6        34G  176M   32G   1% /opt

    /dev/sda3        49G  3.0G   43G   7% /usr

[root@localhost ~]# salt '*' cmd.run 'df -h'

192.168.100.136:

    Filesystem      Size  Used Avail Use% Mounted on

    /dev/sda2        97G  687M   91G   1% /

    tmpfs           427M   92K  427M   1% /dev/shm

    /dev/sda1       194M   34M  151M  19% /boot

    /dev/sda5        20G  172M   19G   1% /home

    /dev/sda6        34G  176M   32G   1% /opt

    /dev/sda3        49G  3.0G   43G   7% /usr

[root@localhost ~]#


Python salt模块介绍


>>> from salt import client

>>> local = client.LocalClient()

>>> result = local.cmd('192.168.100.136','cmd.run',['ifconfig'])

>>> result.keys()

['192.168.100.136']

>>> result.values()

['eth1      Link encap:Ethernet  HWaddr 00:0C:29:75:92:BB  \n          inet addr:192.168.100.136  Bcast:192.168.100.255  Mask:255.255.255.0\n          inet6 addr: fe80::20c:29ff:fe75:92bb/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:45940 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:15047 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:38165890 (36.3 MiB)  TX bytes:1378272 (1.3 MiB)\n\nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1/128 Scope:Host\n          UP LOOPBACK RUNNING  MTU:16436  Metric:1\n          RX packets:16 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)']

>>> result

{'192.168.100.136': 'eth1      Link encap:Ethernet  HWaddr 00:0C:29:75:92:BB  \n          inet addr:192.168.100.136  Bcast:192.168.100.255  Mask:255.255.255.0\n          inet6 addr: fe80::20c:29ff:fe75:92bb/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:45940 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:15047 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:38165890 (36.3 MiB)  TX bytes:1378272 (1.3 MiB)\n\nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1/128 Scope:Host\n          UP LOOPBACK RUNNING  MTU:16436  Metric:1\n          RX packets:16 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)'}

>>>



Saltstack实战


from salt import client

local = client.LocalClient()

 

# ################## 监控今日未采集主机名 ##################

#result = requests.get('http://www.127.0.0.1:8000/assets.html')

# result = ['c1.com','c2.com']

 

# ################## 远程服务器执行命令 ##################

# import subprocess

# result = subprocess.getoutput("salt 'c1.com' cmd.run  'ifconfig'")

#

# import salt.client

# local = salt.client.LocalClient()

# result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

 

# ##################  发送数据 ##################

# requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)
  • 培训费用

  • 上课方式

  • 开班时间

  • 就业情况