Sentry监控系统搭建流程
1.安装Sentry
(1)更新docker版本
注意:最新21版本docker要求在19.3.05版本及以上,如果版本过低,需要更新(更新前要先卸载旧版本)
列出所有包
sudo yum list installed | grep docker
删除相关包
sudo yum -y remove dockerXXXXXX
sudo yum -y remove docker-ceXXXXXX
更新docker-ce版本:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-19.03.6
(2)安装依赖
yum install epel-release
yum install -y python-pip
pip install docker-compose
yum install git
(3)启动sentry
git clone https://github.com/getsentry/onpremise.git
然后进入onpremise目录
执行 ./install.sh(过程中可能会让你配置管理员账号)
执行完成后使用docker-compose up -d 启动
2.配置钉钉告警
有两种方法
(1)在requirements.txt加入以下内容,然后重启所有应用(改方式有缺点,插件是别人写的,告警内容有限,不可修改)
sentry-dingtalk-notify
sentry-dingtalk-new
(2)自己写一个接口,接收sentry发送的数据(),由自己的程序处理完后再发送到钉钉,告警方式选择webhooks,填写自己的接口地址即可
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import os
from flask import request, Flask # flask模块
from dingtalkchatbot.chatbot import DingtalkChatbot # 钉钉发送群消息模块
# 将数据写入到文件中
def Open(s):
Path = './temp.json'
# 判断文件是否存在
if os.path.exists(Path):
os.remove(Path) # 先删除文件
# 文件不存在时,将数据写入到文件中
f = open(Path, 'w')
print(s, file=f)
f.close()
# 接收数据
def GetData():
PostData = request.get_data() # 获取jira POST请求的原始数据
Data = Data = json.loads(PostData) # 将json格式的数据转换为字典
sonData = json.dumps(Data, ensure_ascii=False, indent=4) # 格式化json数据
return Data
# Open函数和GetData函数用作获取数据,对数据进行分析使用
# Flask通用配置
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/webhook/test/', methods=['POST'])
def IssueCreate():
Open(GetData())
project = GetData()['project']
level = GetData()['level']
url = GetData()['url']
environment = GetData()['event']['environment']
types=GetData()['event']['title']
messages = GetData()['message']
culprit = GetData()['culprit']
message = str('##' + '项目:%s' % project + '##' + '\n'
'告警等级:%s' % level + '\n'
'错误地址:%s' % url + '\n'
'环境:%s' % environment + '\n'
'类型:%s' % types + '\n'
'主要告警信息:%s' % messages + '\n'
'主要原因:%s' % culprit + '\n'
)
print(message)
send_message(message)
return "OK", 200
def send_message(message):
webhook = 'https://oapi.dingtalk.com/robot/send?access_token='
xiaoding = DingtalkChatbot(webhook)
xiaoding.send_text(msg=message, is_at_all=True) # is_at_all参数为True表示@所有人
if __name__ == '__main__':
app.run(debug=False, host='部署的IP', port=8888)
3.数据备份和导入
注意:该方法太暴力,备份后的数据重新导入会存在问题,建议只备份某些需要的表
(1)数据备份
进入docker容器 postgres-db 容器id
docker exec -it 容器ID /bin/bash
进入postgres数据库
psql -U postgres
导出命令
pg_dump -U postgres traffic > ./traffic.sql
从容器导出到宿主机
docker cp postgres-db:/var/lib/postgresql/traffic.sql /data
(2)数据导入
从容器导出到宿主机
docker cp /data/traffic.sql postgres-db:/var/lib/postgresql/
进入docker容器 postgres-db 容器id
docker exec -it 容器ID /bin/bash
进入postgres数据库
psql -U postgres 删除该库的所有数据然后重新导入
切换postgres用户
su - postgres
导入命令
psql -U postgres -d postgres < traffic.sql