运维常用python脚本,并写出相应脚本
下面列举一些常用的运维领域中使用到的 Python 脚本,以及其作用和用法:
-
监控告警脚本:这类脚本可以实现监控服务器状态、磁盘空间、网络流量等,按照一定规则判断异常情况,并进行告警通知。举例来说,pymonitor 可以监控服务器的 CPU、内存、磁盘、网络等指标,并可以通过邮件、短信、微信等方式发送预警信息。
-
自动化部署脚本:这类脚本可以自动化部署应用程序、配置文件、服务等。举例来说,使用 Fabric 或 Ansible 可以编写自动化的部署脚本,并可以实现批量部署和配置多台服务器。
-
日志分析脚本:这类脚本可以实现对服务器和应用程序日志的处理和分析,例如常常使用 ELK(Elasticsearch、Logstash、Kibana)套件来处理和分析大量日志数据,或是为了方便实现对控制台记录的日志的筛选和过滤工具。举例来说,使用 Python 的 pandas 库可以对日志数据进行结构化、统计和分析。
-
数据库脚本:这类脚本可以实现数据库的备份、恢复、数据清理等一系列操作。举例来说,使用 Python 的 pymysql 库可以进行 MySQL 数据库的管理,在 Python 中执行 SQL 语句,执行增删改查等操作。
-
网络扫描脚本:这类脚本可以实现检测主机存活、端口扫描、扫描漏洞等操作。举例来说,使用 Python 的 nmap 库可以实现 IP 端口扫描、操作系统和服务版本检测等。
-
安全扫描脚本:这类脚本可以实现实时监控服务器各种的安全事件、攻击等情况,提升服务器的安全性。举例来说,使用 Python 的 suricata 可以检测各种网络攻击并做出响应。
-
应用程序监控脚本:这类脚本可以实现对应用程序的监控,例如实时检测程序 CPU 和内存使用情况、应用程序状态等。举例来说,使用 Python 的 psutil 库可以实现对进程信息的监控。
需要注意的是,以上只是一小部分在运维领域中使用到的 Python 脚本,实际上还有很多其他脚本可以使运维自动化和高效化。
下面给出一些运维领域中常用的 Python 脚本,并给出相应的代码示例。
- 监控告警脚本:这里以 pymonitor 为例,它可以监控系统的 CPU、内存、磁盘、网络等指标,并可以发送告警邮件或者通过企业微信或钉钉信息通知。
import psutil
import os
import subprocess
import time
# 获取 CPU 占用率
def cpu_percent():
# get percentage
return psutil.cpu_percent(interval=1)
# 获取内存占用率
def mem_percent():
# get percentage
return psutil.virtual_memory().percent
# 获取磁盘使用率
def disk_stat():
hd = psutil.disk_partitions()
d = {}
total = 0
used = 0
for i in range(len(hd)):
disk_name = hd[i].device.split(":")[0]
_disk = psutil.disk_usage(disk_name)
_disk.total /= 1024 * 1024 * 1024
_disk.used /= 1024 * 1024 * 1024
_disk.free /= 1024 * 1024 * 1024
d[disk_name] = (_disk.total, _disk.used, _disk.free, _disk.percent)
total += _disk.total
used += _disk.used
percent = used / total
return percent, d
# 获取网络流量
def net_stat():
net_status = psutil.net_io_counters()
return net_status.bytes_sent, net_status.bytes_recv
# 发送邮件
def send_email(content, email_from, email_pwd, email_to):
cmd = 'echo "{1}" | /usr/local/bin/mutt -s "Pymonitor Warning Info" ' \
'-a /opt/pymonitor/pymonitor.log -- {0}'.format(email_to, content)
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
# 发送企业微信信息
def send_workwechat(title, content):
webhook_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx'
data = {
"msgtype": "markdown",
"markdown": {
"content": "{\"title\":\"%s\",\"text\":\"%s\"}" % (title, content),
}
}
requests.post(url=webhook_url, data=json.dumps(data))
# 发送钉钉信息
def send_dingding(title, content):
url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx'
markdown_text = '您好,出现异常状态,请及时处理磁盘告警:' + content
data = {
'msgtype': 'markdown',
'markdown': {
'title': 'Pymonitor Warning Info: ' + title,
'text': markdown_text
}
}
headers = {'Content-Type': 'application/json'}
requests.post(url, headers=headers, data=json.dumps(data))
if __name__=='__main__':
while True:
# 获取监控指标
cpu = cpu_percent()
mem = mem_percent()
disk = disk_stat()
net = net_stat()
# 发送告警信息
if cpu > 80:
send_workwechat('High CPU Usage', "CPU Usage is {0}%".format(cpu))
send_dingding('High CPU Usage', "CPU Usage is {0}%".format(cpu))
if mem > 80:
send_workwechat('High Memory Usage', "Memory Usage is {0}%".format(mem))
send_dingding('High Memory Usage', "Memory Usage is {0}%".format(mem))
disk_percent, partition_stat = disk
for partition, stat in partition_stat.items():
if stat[3] > 60:
content = "{} - {:.2f} GB, usage {:.2f} %".format(partition, stat[0], stat[3])
send_workwechat('High Disk Usage', "Disk Usage: " + content)
send_dingding('High Disk Usage', "Disk Usage: " + content)
if net[1] > 1024 * 1024 * 1024 * 2 and net[0] > 1024 * 1024 * 1024 * 2:
send_workwechat('High Network Flow', "Network Flow Sent: {0}, Received: {1}".format(net[0], net[1]))
send_dingding('High Network Flow', "Network Flow Sent: {0}, Received: {1}".format(net[0], net[1]))
time.sleep(10)
- 自动化部署脚本:这里以 Fabric 为例,它可以自动化部署应用程序和配置文件,并支持命令执行和文件传输等。
from fabric import Connection, task
@task
def deploy(c):
# 连接服务器
conn = Connection(host='127.0.0.1', user='username', connect_kwargs={"password": "password"})
# 获取本地文件并上传
conn.put('local_file', 'remote_file')
# 执行命令
result = conn.run('sudo systemctl restart service_name')
print(result.stdout)
- 日志分析脚本:这里以 ELK 为例,它可以处理和分析大量的日志数据,并提供搜索、统计和可视化等功能。
# 安装 Elasticsearch、Logstash、Kibana
# 配置 Logstash,指定数据源、输入、过滤器和输出
# 配置 Kibana,定义索引和搜索条件
# 启动 Elasticsearch、Logstash 和 Kibana
- 数据库脚本:这里以 pymysql 为例,它可以连接 MySQL 数据库,并可以进行增删改查等操作。
import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='test')
# 增加一条记录
cursor = conn.cursor()
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ('bob', 22))
conn.commit()
# 查询记录
cursor = conn.cursor()
sql = "SELECT * FROM users WHERE age > %s"
cursor.execute(sql, (20,))
result = cursor.fetchall()
print(result)
# 更新记录
cursor = conn.cursor()
sql = "UPDATE users SET age = %s WHERE name = %s"
cursor.execute(sql, (25, 'bob'))
conn.commit()
# 删除记录
cursor = conn.cursor()
sql = "DELETE FROM users WHERE name = %s"
cursor.execute(sql, ('bob',))
conn.commit()
# 关闭数据库连接
conn.close()
- 网络扫描脚本:这里以 nmap 为例,它可以进行 IP 和端口扫描,或者使用 Python 的 nmap 库。
# 使用 nmap 进行端口扫描
nmap -sT 192.168.0.1-10
# 使用 Python 的 nmap 库进行扫描
import nmap
# 扫描指定 IP 地址的开放端口
nm = nmap.PortScanner()
nm.scan('127.0.0.1', '22-443')
open_ports = []
for host in nm.all_hosts():
open_ports += nm[host]['tcp'].keys()
print(open_ports)
- 安全扫描脚本:这里以 suricata 为例,它可以监控网络流量并检测安全事件。
# 安装 suricata
# 配置 suricata,定义规则和日志格式
# 启动 suricata
- 应用程序监控脚本:这里以 psutil 为例,它可以监控系统和应用程序的运行状态。
import psutil
# 获取进程信息
processes = []
for proc in psutil.process_iter(['pid', 'name']):
processes.append(proc.info)
# 获取 CPU 占用率
cpu_percent = psutil.cpu_percent(interval=1)
# 获取内存占用率
mem_percent = psutil.virtual_memory().percent
# 获取磁盘使用率
disk_usage = psutil.disk_usage('/').percent

浙公网安备 33010602011771号