/ops-alert

Primary LanguageHTMLMIT LicenseMIT

运维报警管理平台 OPSAlert

安装说明

零、环境搭建

系统:Ubuntu(推荐)

安装LAMP:(PHP >= 5.5.9)

apt-get install lamp-server^
apt-get install php5-curl(Ubuntu 16.04是php-curl)

开启apache rewrite模块

a2enmod  rewrite

编辑/etc/apache2/apache2.conf,找到

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride none
    Require all granted
</Directory>

AllowOverride None改成AllowOverride all

创建数据库: 略……

一、下载到本地:

cd /var/www
git clone https://github.com/cszhi/ops-alert.git

编辑/etc/apache2/sites-available/000-default.conf,将DocumentRoot /var/www/html改成DocumentRoot /var/www/ops-alert/public

重启apache

service apache2 restart

二、配置 .env文件 (拷贝.env.example为.env)

……
DB_HOST=127.0.0.1		#数据库ip
DB_DATABASE=homestead	#数据库名称
DB_USERNAME=homestead	#用户名
DB_PASSWORD=secret		#数据库密码
……

其它配置保持默认

三、确保storagebootstrap/cache目录和.env文件让服务器有写入权限

cd /var/www/ops-alert
chmod 777 storage/ bootstrap/cache/ .env -R

四、生成 key

php artisan key:generate

五、安装初始化数据表

php artisan migrate
php artisan db:seed

六、运行队列监听器

启动队列侦听器

php artisan queue:listen

执行这个命令后,它将会持续运行直到被手动停止为止。 另外可以使用Supervisor进程监控软件,来确保队列侦听器不会停止运行。

Supervisor 设置

Ubuntu下安装Supervisor

apt-get install supervisor

创建并编辑文件/etc/supervisor/conf.d/laravel-worker.conf

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/ops-alert/artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=root
numprocs=3
redirect_stderr=true
stdout_logfile=/var/www/ops-alert/storage/worker.log

/var/www/ops-alert是项目所在目录。

numprocs=3指运行并监控3queue:work进程。

如果修改了管理-配置中的任何配置信息,最好重新加载下Supervisor

supervisorctl reload

启动Supervisor

service supervisor restart
supervisorctl reread
supervisorctl update
supervisorctl start laravel-worker:*

使用说明

帐号密码

帐号:admin 密码:Admin123@

邮箱设置

略……

微信设置

  1. 注册微信企业号
  2. 进入通讯录新增成员。其中帐号就是等会新增成员要用到的微信号
  3. corpidcorpsecret:进入设置-权限管理-管理员,就可以看到CorpIDSecret
  4. agentid:进入应用中心,新建消息型应用,创建完后,进入应用,其中应用ID就是agentid
  5. 设置中,有企业号的二维码,在通讯录中成员扫描该二维码就可以关注该企业号。

新增成员

微信号就是在微信企业号中,新增成员时填写的帐号

新增分组

  1. 可选三种报警方式,微信邮件微信+邮件
  2. 每一个分组对应一个唯一的TOKEN,用来调用报警api时识别分组

报警api

api地址:

http://ip:port/api/$token 如:http://1.2.3.4:8000/api/qdm4DQYnhz7Z387W

调用api

get方式:curl 'http://ip:port/api/$token?hostname=$hostname&ip=$ip&content=$content'

post方式:curl 'http://ip:port/api/$token' -d hostname=$hostname -d ip=$ip -d content=$content

* hostname: 服务器名称
* ip: 服务器ip地址
* content: 报警内容

调用api实例

脚本检测系统负载,负载高于设定的阈值则调用api报警

#!/bin/bash
# Program:
#       check system load
# History:
# 2017/03/03	caishunzhi	First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

DIR=$(cd "$(dirname "$0")"; pwd)
CURL="curl -s --connect-timeout 30"
TOKEN="qdm4DQYnhz7Z387W"
IP="192.168.0.100"
API="http://$IP:8000/alert/$TOKEN"
HOSTNAME=$(hostname)
LOAD_LIMIT=1
>$DIR/content.txt

#系统当前负载高于设定的阈值,将系统负载信息写入content.txt
load(){
	LOAD=$(awk '{print $1}' /proc/loadavg)
	LOADAVG=$(awk '{print $1,$2,$3}' /proc/loadavg)
	TMP=`awk -v num1=$LOAD -v num2=$LOAD_LIMIT 'BEGIN{print(num1>num2)?"1":"0"}'`
	if [ $TMP -eq 1 ];then
		echo "LOAD:$LOADAVG" >$DIR/content.txt
	fi
}

alert(){
    $CURL $API -d hostname="$1" -d ip="$2" -d content="$3"
}

load
#content.txt文件如果不为空时,调用alert函数发送报警
[ -s $DIR/content.txt ] && alert $HOSTNAME $IP "$(cat $DIR/content.txt)"

问题

Q、收不到报警邮件

确保邮件配置中相关配置正确。 检查storage/worker.log日志,如果有如下报错:

[Symfony\Component\Debug\Exception\FatalErrorException]  
 Call to undefined function App\curl_init() 

说明没有安装php-curl扩展,需要安装下。

Q、收不到微信报警信息

确保微信配置中相关配置正确。

检查storage/worker.log日志,根据具体报错信息排查。

===============================

Laravel PHP Framework

Build Status Total Downloads Latest Stable Version Latest Unstable Version License

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, queueing, and caching.

Laravel is accessible, yet powerful, providing powerful tools needed for large, robust applications. A superb inversion of control container, expressive migration system, and tightly integrated unit testing support give you the tools you need to build any application with which you are tasked.

Official Documentation

Documentation for the framework can be found on the Laravel website.

Contributing

Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the Laravel documentation.

Security Vulnerabilities

If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell at taylor@laravel.com. All security vulnerabilities will be promptly addressed.

License

The Laravel framework is open-sourced software licensed under the MIT license