一:平台的主要工作流程
消息源==>数据接收==>数据处理==>存入数据库并推送至用户
以存入数据库的数据为基础,可以开发多种功能,比如周报统计,自动化处理故障,历史告警记录……等等
二:前期准备
首先,我们需要配置基础环境,需要安装数据库,web框架,web服务,开发环境,以及告警消息来源。
在这里选择使用MySQL+Nginx+Django+Uwsgi+Python3+Zabbix,系统镜像为centos8,以下安装教程7同样适用,dnf不可用改为yum也行 乌班图用apt-get
1:首先安装MySQL,配置用户和库
dnf install @mysql
systemctl enable --now mysqld 启动并设置开机自启
systemctl status mysqld 查看是否运行
create database zabbix character set utf8 collate utf8_bin; 创建zabbix所用的库,后续会用到
create user zabbix@localhost identified by 'password'; 创建zabbix的数据库用户
grant all privileges on zabbix.* to zabbix@localhost; 将zabbix库的权限给zabbix用户
create database django character set utf8 collate utf8_bin;创建django用的库
create user django@localhost identified by 'password';创建django的数据库用户
grant all privileges on django.* to django@localhost;将django库的权限给django用户
2:接着安装python3,django框架,开发库,uwsgi
dnf install python3 -y
pip3 install Django -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install pymysql
dnf install python3-devel -y
dnf install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel -y
dnf install -y gcc pcre-devel openssl-devel
pip3 install uwsgi
注意检查pymysql等开发包的安装路径,可以通过--target 参数指定安装路径
3:安装zabbix-server agent web全套,按照官网操作一步步往下走即可,在这里顺便装好了Nginx
rpm -Uvh https://repo.zabbix.com/zabbix/5.2/rhel/8/x86_64/zabbix-release-5.2-1.el8.noarch.rpm
dnf clean all
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbixzcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
修改zabbix_server.conf中的DBPassword=”你的密码“
取消ngxin配置文件中zabbix.conf中
# listen 80;
# server_name example.com;
前的注释(此处为安全起见,如果服务器位于公网环境,建议将80端口改为其他空闲端口,如9527,6666等)
systemctl start zabbix-server zabbix-agent nginx php-fpm 启动服务
systemctl enable zabbix-server zabbix-agent nginx php-fpmsystemctl start zabbix-server zabbix-agent nginx php-fpm 设为开机启动
然后上网页进行一些基本配置
这样就算配置好zabbix-web了
到此为止,前期的基础环境搭建算是完成了
以上服务建议将告警用的django数据库和zabbixserver所用的数据库分开放在不同的机器上以提高性能和风险抗性。理想状态是django,zabbix,以及前两者所用的数据库分别放在不同的服务器上并做高可用配置。
三:万事第一步,新建文件夹
1.创建项目
让我们切换到 /opt目录下 输入 django-admin startproject Alarmstation
这个命令就是用django-admin创建项目Alarmstation
本质是调用django-admin.py这个文件,如果环境变量安装的时候没写,找到这个文件直接执行文件也是一个效果 就像这样:
/usr/local/bin/django-admin.py startproject Alarmstation
接下来让我们看看django创建了些什么东西
.
└── Alarmstation 项目的容器。
├── Alarmstation
│ ├── asgi.py 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
│ ├── __init__.py 一个空文件,告诉 Python 该目录是一个 Python 包。
│ ├── settings.py 该 Django 项目的设置/配置。
│ ├── urls.py 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
│ └── wsgi.py 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
└── manage.py 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
2.uwsgi的基本配置
在Alarmstation项目根目录下创建uwsgi.ini文件
内容如下:
[uwsgi]
socket = 127.0.0.1:6666
master = true //主进程
#vhost = true //多站模式 只作为报警平台可以不需要
#no-site = true //多站模式时不设置入口模块和文件 只作为报警平台可以不需要
workers = 2 //子进程数
reload-mercy = 10
vacuum = true //退出、重启时清理文件
max-requests = 1000
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi.pid //pid文件,用于下面的脚本启动、停止该进程
daemonize = /opt/Alarmstation/uwsgi.log
pythonpath = /usr/local/lib/python3.6/site-packages/ //指定python的site-packages路径,之前的开发包和库都必须安装到这个路径下,如果安装到其他路径了,就卸载,然后用target参数指定为这个路径
3.nginx中新增关于django的部分
新增配置如下
server {
listen 8080;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:6666; //必须和uwsgi中的设置一致
uwsgi_param UWSGI_SCRIPT Alarmstation.wsgi; //入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
uwsgi_param UWSGI_CHDIR /opt/Alarmstation; //项目根目录
index index.html index.htm;
client_max_body_size 35m;
}
}
重启nginx
4.然后做一些简单的微调
接下来,修改settings.py这个文件
首先,将ALLOWED_HOSTS = []改为 ALLOWED_HOSTS = ["*"] 这表示允许所有ip访问
然后,还记得之前设置的django数据库用户名和密码么?
找到
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
改为
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'django', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'django', # 数据库用户名
'PASSWORD': 'passwd', # 数据库密码
}
}
在改为使用mysql作为数据库后,还需要在项目的__init__.py中加两行
import pymysql
pymysql.install_as_MySQLdb()
这是为了告诉django,现在用的是mysql而非自带的数据库
然后创建一个app
django-admin startapp mainwork
django也会创建一个文件目录
── mainwork
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── __pycache__
│ ├── __init__.cpython-36.pyc
│ └── views.cpython-36.pyc
├── tests.py
└── views.py
修改settings.py 在INSTALLED_APPS 中增加刚刚创建的app名
就像这样:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mainwork',
]
然后修改views.py文件
写上一个简单的小程序
from django.shortcuts import render
from django.shortcuts import HttpResponse
def Get_message(request):
return HttpResponse("
Hi!
")然后修改urls.py如下
from django.contrib import admin
from django.urls import path
from mainwork import views //导入刚刚写的小程序 from ‘app’import 文件名
urlpatterns = [
path('admin/', admin.site.urls),
path('Get_message/', views.Get_message), //像这样增加一条路由
]
然后启动uwsgi
uwsgi --ini uwsgi.ini 建议在脚本中使用uwsgi.ini的绝对路径
在浏览器中输入ip+端口+路径
现在让我们再看看项目的目录结构
就这样,我们走出了第一步,建立好了所有基础设施,可以步入下一个阶段了!
下一部分,我们将编写接收告警信息的接口api并设计一张用于存储告警数据的数据库表。
本人联系方式763097329@qq.com,如果文章有误,请联系我指出,我会尽快修改。