太强了!利用python批量巡检服务状态


01

背景介绍

近期,公司在进行一次大规模的机房搬迁,各项业务系统需要迁移到一个全新的基础设施环境,中间涉及到多套组件,尤其是众多的服务器及其承载的各类应用端口,由于时间紧迫,新环境还未搭建监控平台,如何确保在迁移之后所有的服务端口仍能正常开启并对外提供服务,成为了当前运维团队面临的问题。

在传统的人工逐一检查方式下,面对数量庞大的服务器和种类繁多的应用端口,不仅费时费力,而且容易出现遗漏和误差,为了快速解决此问题,我们采用通过python对业务端口进行批量自动化检查。


02

实现过程

脚本代码主要分为三块,首先是connect函数,利用了python的socket模块来检测IP端口是否存活,设置默认超时时间2s,其次是main_from_file函数,主要是读取文本的ip端口信息,然后传给connect去判断端口存活,最后是单独检测一个IP和端口的情况,如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import socket,sys,re

def connect(ip, port):
    """
    判断指定IP和端口是否存活
    """

    clinet_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clinet_sock.settimeout(2)
    result = clinet_sock.connect_ex((ip,port))
    if result == 0:
        return 'Up'
    else:
        return "Down"
    clinet_sock.close()

def main_from_file(input_file, output_file):
    """
    从文件读取IP和端口进行批量检测
    """

    with open(input_file, 'r') as in_f, open(output_file, 'w') as out_f:
        for line in in_f.readlines():
            result = re.split(r's+', line.strip())
            try:
                alive = connect(result[0], int(result[1]))
            except:
                result_line = "Format error.n"
            else:
                result_line = "{0}t{1}t{2}n".format(result[0],int(result[1]),alive)
                print("{0}t{1}t{2}".format(result[0],int(result[1]),alive))
            out_f.write(result_line)

def main_single_ip(ip, port):
    """
    单独检测一个IP和端口是否存活
    """

    alive = connect(ip, port)
    print("{0}t{1}t{2}n".format(ip,port,alive))


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Check ports.')
    file_group = parser.add_argument_group('File input IP port information')
    file_group.add_argument('-f', '--file', dest='input_file', type=str, help='The path to the input file containing IP addresses and ports.')

    ip_port_group = parser.add_argument_group('Single IP and Port Options')
    ip_port_group.add_argument('-i', '--ip', dest='ip', type=str, help='An IP address to check.')
    ip_port_group.add_argument('-p', '--port', dest='port', type=int, required=False, help='The port number to check when using -i/--ip option. This option is mandatory when using -i/--ip.')
    args = parser.parse_args()

    if args.input_file:
        main_from_file(args.input_file, "output.txt")
    elif args.ip and args.port:
        main_single_ip(args.ip, args.port)
    else:
        parser.print_help()
        exit(1)
可以通过执行脚本帮助看到,分为两部分,一部分是-f参数,以文本的方式检测,另一部分对单个ip端口进行检测如下:
太强了!利用python批量巡检服务状态


单个形式检测

# python check_port.py   -i 192.168.2.43  -p 8080

太强了!利用python批量巡检服务状态



文本的形式检测

# cat ipportinfo.txt
192.168.2.2    22
192.168.2.10   80

# python check_port.py  -f ipportinfo.txt

太强了!利用python批量巡检服务状态


代码获取:台回复端口检测

代码获取:后台回复端口检测

代码获取:后台回复端口检测


MUSIC

太强了!利用python批量巡检服务状态

♬..♩~ ♫. ♪..

END


太强了!利用python批量巡检服务状态

一键启动!利用Python轻松构建HTTP服务器

超实用!利用Nginx实现文件下载,效率翻倍

高效部署!使用Docker Compose快速搭建Harbor私有镜像仓库

原文始发于微信公众号(Linux运维之旅):太强了!利用python批量巡检服务状态

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/273763.html

(0)
明月予我的头像明月予我bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!