asterisk事件監控

2021-09-08 08:23:13 字數 4403 閱讀 9577

asterisk有乙個很好的東東,就是event,會主動通知客戶端伺服器發生了什麼……不過前提是你得先連上伺服器。

好,不廢話了,下面開工。

首先宣告下環境:centos 6

一、安裝並配置asterisk

wget

2、解壓並安裝

tar zxvf asterisk-1.8.7.1.tar.gz

cd asterisk-1.8.7.1

./configure && make && make install && make samples

涉及的命令:

yum install libxml2-devel

yum install ncurses-devel

3、開啟ami管理

編輯manager.conf檔案,將general中的enabled置為yes

新增管理員:

二、編寫asterisk事件監控程式 

原理:通過login action連上asterisk的5038埠,監聽此埠並把訊息輸出。 

下面是c++實現的**: 

1/*2

file : asteriskeventcat.cpp

3author : mike

4e-mail : [email protected]*/

67 #include

8 #include

9 #include

10 #include

11#define block_size 10*1024

1213

using

namespace std;

14using

namespace boost::asio;

1516

string strlogin(string username,string pswwd)

17 25

26int main()

27

42else

43

4647

string msg="";

4849

string username,password;

50 cout<

user :

";51 cin>>username;

52 cout<

password :

";53 cin>>password;

5455 msg += strlogin(username.c_str(),password.c_str());

56//

msg += strlogin("admin","admin");

57 size_t len = s.write_some(buffer(msg.c_str()), ec);

58if(len <= 0)

59

6364 std::ofstream fout("

eventcat.txt

");65

while(true)

66 ;

68 len=s.read_some(buffer(buf), ec);

69if(len<=0)

70break;

71 cout.write(buf, len);

72 fout<73 fout.flush();

74 }

7576

return

0;77 }

三、進行事件監控

首先要保證你的防火牆讓你過5038埠,嫌配置麻煩的話把防火牆關閉就行了,下面是執行效果:

我這人比較懶,雖是所謂的c/c++

程式設計師,可是總嫌c++寫的**多,經常用python做模型,

python**: 

'''

file : asteriskeventcat.py

author : mike

e-mail : [email protected]

'''import socket

buflen = 1024 * 10

defstrlogin(username,passwd):

msg =

'action: login

\r\n

'msg +=

'username: '

+username+

'\r\n

'msg +=

'secret: '

+passwd+

'\r\n

'msg +=

'\r\n

'return

msgdefmain():

s = socket.socket(socket.af_inet, socket.sock_stream)

s.connect((

raw_input

("input ip : "

), 5038

))if

not

s :print

"connect fail!"

return

s.send(strlogin(

raw_input

("input user name :"

),raw_input

("input password :"

)))while

true

:data = s.recv(buflen)

if

len(data) <=0:

continue

print

data

if__name__ == '__main__':

main()

raw_input

("press enter to continue"

)

現在在學習go語言,捎帶下,也方便我以後ctrl + c: 

/*

file : asteriskeventcat.go

author : mike

e-mail : [email protected]

*/packagemain

import(

"net"

"bufio"

"os"

)varbuflen = 1024 * 10

varlinelen = 2

// windows : "\r\n" 2 ; linux : "\n" 1

funcmain()

conn.write(

byte

("action: login

\r\n

username: "

+string

(usrname[0:

len

(usrname)-linelen])+

"\r\n

secret: "

+string

(pwd[0:

len

(pwd)-linelen])+

"\r\n\r\n"))

for

}

好,就這些了,希望對你有幫助。

使用Zabbix監控Asterisk

asterisk部署完成後,可以使用zabbix對其進行監控。1 在asterisk所在的伺服器上部署zabbix的agent,並編寫配置檔案zabbix agentd.conf asterisk userparameter iax.status,sudo usr sbin asterisk rvv...

mysql 監控事件 Mysql事件監控日誌

建立監控表 create table t event history id int unsigned not null primary key auto increment,dbname varchar 128 not null default cat eventname varchar 128 n...

事件監控器

建立事件 db2 create event monitor dlmon for tables,deadlocks with details write to file c dlmon mkdir c dlmon 啟用事件 db2 set event monitor dlmon state 1 刪除事...