【运维】linux使用systemd手动部署与管理服务进程,以webhook回调告警为例(附常用linux进程/端口状况查看命令)
【运维】linux使用systemd手动部署与管理服务进程,以webhook回调告警为例(附常用linux进程/端口状况查看命令)
文章目录
- 1、systemd服务部署
- 2、webhook回调告警服务
- 3、常用linux进程/端口状况查看命令
1、systemd服务部署
1、服务配置文件,创建服务
-
创建服务:
sudo nano /etc/systemd/system/test1.service
-
[Unit]
部分:- Description: 对服务的简要描述。
- After: 指定服务启动的顺序,这里表示在
network.target
之后启动该服务。
-
[Service]
部分:- ExecStart: 指定运行服务的命令。在这个例子中,它是一个 Python 脚本。
- Restart: 定义何时重启服务,这里设置为在服务失败时重启。
- User 和 Group: 指定服务运行的用户和组。
-
[Install]
部分:- WantedBy: 定义服务安装时,链接到的目标/运行级别,这里表示多用户模式。
[Unit]
Description=test1
After=network.target[Service]
ExecStart=/home/test1 -f /home/etc/test1-api.yaml
Restart=always
User=nobody
Group=nogroup[Install]
WantedBy=multi-user.target
2、常用服务命令
- 查看服务状态
systemctl status <服务名>
systemctl status nginx
- 启动服务(常用)
systemctl start <服务名>
systemctl start nginx
- 停止服务
systemctl stop <服务名>
systemctl stop nginx
- 重启服务(重载配置), (常用)
systemctl restart <服务名>
systemctl restart nginx
- 重新加载服务配置
systemctl reload <服务名>
systemctl reload nginx
- 启用服务(开机启动, 常用)
systemctl enable <服务名>
systemctl enable nginx
- 禁用服务(取消开机启动)
systemctl disable <服务名>
systemctl disable nginx
- 检查服务是否开机启动
systemctl is-enabled <服务名>
systemctl is-enabled nginx
- 查看所有服务的状态
systemctl list-units --type=service
- 获取服务日志
journalctl -u <服务名>
journalctl -u nginx
- 重新加载 systemd 管理的服务配置文件
systemctl daemon-reload
3、服务宕机感知
-
设置 Restart 选项:
在服务的 unit 文件中可以配置Restart
选项,以便在服务失败或停止时自动重新启动服务。常见的选项有always
、on-failure
等。[Service] ExecStart=/usr/bin/your-service Restart=always# 可选的,设置重启之前的延时 RestartSec=10
-
配置报警和通知:
-
系统日志监控:Systemd 会将服务状态的变更记录在系统日志中,可以结合 ELK(Elasticsearch, Logstash, Kibana)、Prometheus + Grafana、Zabbix 等监控系统进行报警通知。
-
自定义脚本:在服务的 unit 文件中,使用
ExecStartPre
或ExecStartPost
调用自定义脚本来发送通知。例如:[Service] ExecStart=/usr/bin/your-service Restart=always ExecStartPost=/path/to/your-notification-script.sh
-
-
Watchdog:
使用 Systemd 的 Watchdog 功能来监控服务。如果服务未能在规定时间内回应,systemd 将会执行相应的处理。在 unit 文件中配置如下:
[Service] ExecStart=/usr/bin/your-service Restart=on-failure WatchdogSec=30s
2、webhook回调告警服务
回调接口介绍:
- 接口回调是一种设计模式,使得程序可以在某些事件发生或条件满足时,主动调用一些预定的函数或方法。
- 接口回调的用法非常广泛,以下是一些常见的接口回调用法:
事件监听:例如在用户界面中,当用户点击按钮、滑动滚动条等事件发生时,可以通过回调方法处理这些事件。
异步处理:例如在网络请求、文件读写等异步操作中,可以使用回调方法处理结果,不阻塞主线程。
自定义行为:例如在排序、遍历等操作中,可以通过回调方法自定义操作的行为。 - UI交互:在用户界面交互中,通过接口回调处理用户事件,如点击、滑动、输入等。
网络请求:在网络请求中,通过接口回调处理请求的结果,如成功、失败、超时等。
多线程编程:在多线程编程中,通过接口回调处理线程的状态,如开始、结束、进度等。
数据库操作:在数据库操作中,通过接口回调处理查询、更新、删除等操作的结果。 - 1, 2
webhook介绍,与api的区别:
- Webhook 是一种基于 HTTP 的回调函数,可在 2 个应用编程接口(API)之间实现事件驱动的轻量级通信。
- 要设置 Webhook,客户端需向服务器 API 提供唯一的 URL,并指定其要了解的事件。设置 Webhook 后,客户端不再需要轮询服务器。发生特定的事件时,服务器会自动将相关的有效负载发送到客户端的 Webhook URL。
- Webhook 通常被称为“反向 API” 或“推送 API”,因为通信责任落在了服务器而非客户端上。与客户端不断发送 HTTP 请求来请求数据,直至服务器作出响应的方式不同,服务器在数据可用时会立即向客户端发送一个 HTTP POST 请求。虽然有这些别名,但其实 Webhook 并非 API,二者可以结合使用。应用必须具有 API 才能使用 Webhook。
- 1, 2, 3
这里以告警bot为例
- 1、实现一个中转proxy转发的服务进程
- 2、提供回调接口给到云平台(按照平台定义的接口规范),这样平台触发告警后会调用这个接口
- 3、接口收到消息后,转推送消息到webhook订阅号(企微,钉钉等等)
3、常用linux进程/端口状况查看命令
参考资料:1 , linux基础命令总结整理
Linux 常用命令
进程:
sudo su
bash install.sh
stress --cpu 1 --timeout 60 # 压力测试
ps aux | grep 'test1'
pidof test.py
lsof +D /home网络:
ip -4 a
ifconfig | grep br0硬盘:
free -h
查找进程
-
如果知道进程名称或命令行的一部分,你可以使用
ps
和grep
结合来查找。例如:ps aux | grep '[t]est.py'
这里的aux
参数列出所有进程,包括其他用户的进程。用[t]est.py
而不是test.py
来避免grep
自己显示在结果中。 -
如果你知道进程启动的确切可执行文件,可以用
pidof test.py
: -
lsof
是另一个强大的工具,可以列出打开的文件和相关进程。比如要找出在home
目录下打开的文件相关的进程:lsof +D /home/yourusername
这将列出所有打开
/home/yourusername
下文件的进程。 -
可以使用交互式工具如
top
或htop
来显示系统中的所有进程,然后通过筛选找到特定的进程:top -u $(whoami)
在
top
中你可以按/
然后输入关键字来搜索进程名。 -
pidstat
是sysstat
包中的一个工具,可以用来监控特定 PID 的资源使用情况。如果你知道进程特征,可以过滤:pidstat -u -p ALL | grep 'test.py'
端口占用情况
-
netstat
是一个用于显示网络连接、路由表、接口统计数据、伪装连接和多播成员的命令。netstat -tuln | grep LISTEN
-t
: 显示TCP端口-u
: 显示UDP端口-l
: 显示监听状态的端口-n
: 以数字格式显示地址和端口-p
: 显示使用端口的进程PID和名称
-
ss
提供了类似netstat
的功能,但速度更快,信息更详细。
查看所有监听的端口: ss -tuln
同样地,你也可以使用-p
参数来显示每个端口相关的进程 : sudo ss -tulnp -
lsof
是一个列出打开的文件的工具,其中也包括网络文件。
查看指定端口的占用情况,例如端口8080:sudo lsof -i :8080
查看所有监听的端口:
sudo lsof -i -P -n | grep LISTEN
-P
: 强制使用端口号而非服务名-n
: 强制使用数字格式的IP地址而非主机名
-
使用
nmap
nmap
是一个网络扫描工具,通常用于扫描开放的端口,但也可以用来查看本地系统的端口状态。
安装nmap
:sudo apt-get install nmap # Debian/Ubuntu系 sudo yum install nmap # CentOS/Fedora系
扫描本地开放的端口:
sudo nmap -sT -O localhost