Open zxhubo opened 6 years ago
the listener can send massage to dingding by http ,but can't send the massage when "from_state:RUNNING"
now ,I say clearly once again, I hava code a python to listen the rsyslog process, when the eventname is "PROCESS_STATE_STOPPING",can't do anything by python code ,for example send message to antwhere by http .for example: if the code is : if header["eventname"] == "PROCESS_STATE_STOPPING": write_stderr(str(type(pheader)) + "\n") write_stderr(str(pheader) + "\n") write_stderr(str(type(ppayload)) + "\n") write_stderr(str(ppayload) + "\n") post_data(URL, data_test) childutils.listener.ok(sys.stdout) continue can write the message to the log but can't execute the code :post_data(URL, data_test). if code is : if header["eventname"] == "PROCESS_STATE_STOPPING": childutils.listener.ok(sys.stdout) write_stderr(str(type(pheader)) + "\n") write_stderr(str(pheader) + "\n") write_stderr(str(type(ppayload)) + "\n") write_stderr(str(ppayload) + "\n") post_data(URL, data_test) continue all of the code can't execute ,so I guess the state "PROCESS_STATE_STOPPING" is a sepecial eventname ? right ?
I hava used supervisor to manage rsyslog, I hope when rsyslog process state is changed, listener can send the payload to the dingding(dingding is one of a office im tool by alibaba )。 the python code is :
coding=UTF-8
import sys import requests
url = "https://oapi.dingtalk.com/robot/send?access_token=a47c28f0618e46e3acd4afd273f1b90c27fb28cebcbd6ec2efe86bbd913f8d91" data_test = "{ \"msgtype\": \"text\", \"text\": {\"content\": \"test\"}}".decode("utf-8") headers = { "Content-Type": "application/json" } response_data="{\"errmsg\":\"ok\",\"errcode\":0}" def write_stdout(s):
only eventlistener protocol messages may be sent to stdout
def write_stderr(s): sys.stderr.write(s) sys.stderr.flush()
def post_data(url, data):
def main(): while True:
if name == 'main':
I use command sudo supervisorctl :
admin@clsapp01-prd-hz:/etc/supervisor/python$ sudo supervisorctl sudo: unable to resolve host clsapp01-prd-hz mylistener RUNNING pid 18583, uptime 1:21:59 rsyslog RUNNING pid 18584, uptime 1:21:59 supervisor> But when I use command sudo service supervisor restart to restart supervisor,,I can find log in error log: ver:3.0 server:supervisor serial:109 pool:mylistener poolserial:109 eventname:TICK_5 len:15 []when:1539166135 ver:3.0 server:supervisor serial:110 pool:mylistener poolserial:110 eventname:PROCESS_STATE_STOPPING len:66 []processname:rsyslog groupname:rsyslog from_state:RUNNING pid:11708 [] body is :{ "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:RUNNING pid:11708"}} [] start send data { "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:RUNNING pid:11708"}} to dingding ver:3.0 server:supervisor serial:0 pool:mylistener poolserial:0 eventname:PROCESS_STATE_STARTING len:70 []processname:mylistener groupname:mylistener from_state:STOPPED tries:0 ver:3.0 server:supervisor serial:1 pool:mylistener poolserial:1 eventname:PROCESS_STATE_STARTING len:64 []processname:rsyslog groupname:rsyslog from_state:STOPPED tries:0 [] body is :{ "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:STOPPED tries:0"}} [] start send data { "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:STOPPED tries:0"}} to dingding [] send data to dingding is successful ! ver:3.0 server:supervisor serial:2 pool:mylistener poolserial:2 eventname:PROCESS_STATE_RUNNING len:73 []processname:mylistener groupname:mylistener from_state:STARTING pid:16145 ver:3.0 server:supervisor serial:3 pool:mylistener poolserial:3 eventname:PROCESS_STATE_RUNNING len:67 []processname:rsyslog groupname:rsyslog from_state:STARTING pid:16146 [] body is :{ "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:STARTING pid:16146"}} [] start send data { "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:STARTING pid:16146"}} to dingding [] send data to dingding is successful ! ver:3.0 server:supervisor serial:4 pool:mylistener poolserial:4 eventname:TICK_5 len:15 [*]when:1539166140 then ,the dingding talk has received four massage: processname:rsyslog groupname:rsyslog from_state:RUNNING pid:19866 processname:rsyslog groupname:rsyslog from_state:STOPPING pid:19866 processname:rsyslog groupname:rsyslog from_state:STOPPED tries:0 processname:rsyslog groupname:rsyslog from_state:STARTING pid:3371 from the log we can say : [] body is :{ "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:RUNNING pid:11708"}} can't send to dingding . the log is :[] start send data { "msgtype": "text", "text": {"content":"processname:rsyslog groupname:rsyslog from_state:RUNNING pid:11708"}} * to dingding .
however ,I can use shell command curl to send the massage: admin@clsapp01-prd-hz:/etc/supervisor/conf.d$ admin@clsapp01-prd-hz:/etc/supervisor/conf.d$ curl 'https://oapi.dingtalk.com/robot/send?access_token=a47c28f0618e46e3acd4afd273f1b90c27fb28cebcbd6ec2efe86bbd913f8d91' \
Why ? My English is poor,can you understand what I say and help me.