使用supervisor+rsyslog+sentry進(jìn)行日志管理配置方法 首先我想說(shuō),,真他么太折騰了,終于搞定了,,尼瑪啊啊啊啊啊啊啊啊啊啊啊?。榱苏垓v這個(gè)差不多花了一個(gè)星期的時(shí)間,,從最開(kāi)始的syslog開(kāi)始,,完全不了解,文章又少,,我連俄語(yǔ)文章都拜讀了啊,,太佩服自己了,用英語(yǔ)提了下問(wèn),,結(jié)果沒(méi)人鳥(niǎo),,剛開(kāi)始看的時(shí)候,感覺(jué)文章都是一堆天書,,機(jī)器上也根本沒(méi)有syslog,,折騰了幾天知道了rsyslog的基本使用,才發(fā)現(xiàn)自己的os尼瑪syslog有問(wèn)題根本就不記錄,,到處折騰不好,,都想放棄了,期間又重裝系統(tǒng),,必須感謝胡哥,,陪我一起解決問(wèn)題,一起研究rsyslog的用法,,給我刻盤,,昨晚1點(diǎn)了我都打算睡了還來(lái)敲門說(shuō)他知道不能上傳日志到sentry是什么原因了,1點(diǎn)了啊早上7點(diǎn)起床有么有啊,,我穿條內(nèi)褲又跑去他寢室看是咋回事,,我看他也困的不行,說(shuō)話聲音都沙了,,辛苦了,。好基友,一被子??!草,! 環(huán)境:Sentry Server:ubuntu 12.04 desktop(192.168.1.101) Test PC:ubuntu 12.04 desktop(192.168.1.106) 在產(chǎn)生日志的機(jī)器(Test PC)上安裝Supervisor:$ sudo pip install supervisor 配置Supervisor:首先需要使用 # echo_supervisord_conf > /etc/supervisord.conf 或者: $ echo_supervisord_conf |sudo tee /etc/supervisord.conf 配置文件可以自行指定文件所在位置, 按照conf文件示例內(nèi)容修改配置,添加監(jiān)控任務(wù),。其中 [program:THE_PROGRAM_NAME] command=COMMAND_TO_RUN_THE_PROGRAM autorestart=true stdout_logfile=syslog redirect_stderr=true THE_PROGRAM_NAME為要監(jiān)控的程序名稱,,可隨意設(shè)置,會(huì)在syslog日志中顯示 COMMAND_TO_RUN_THE_PROGRAM為啟動(dòng)這個(gè)被監(jiān)控程序的命令,,自動(dòng)重啟時(shí)用到 stdout_logfile的值設(shè)置為特殊值 配置好后啟動(dòng)supervisor: # supervisord 修改產(chǎn)生日志機(jī)器上的rsyslog配置:在/etc/rsyslog.d/下新建你的xxx.conf文件,內(nèi)容為: $SystemLogUsePIDFromSystem on if $programname == 'supervisord' then @@192.168.1.101:10514;RSYSLOG_SyslogProtocol23Format 便會(huì)將supervisor產(chǎn)生的日志用tcp方式發(fā)送到Sentry Server的10514端口 Sentry Server上安裝Sentry:PS:因?yàn)閟entry依賴django,,且最新版必須依賴1.5.1以上版本,,本地如果有django環(huán)境請(qǐng)使用virtualenv安裝。 $ virtualenv --no-site-packages venv $ cd venv/ $ source bin/activate $ pip install sentry $ pip install loggerglue $ pip install MySQL-python #虛擬環(huán)境沒(méi)有mysql,,sentry默認(rèn)是sqlite,,要用到mysql需要安裝上,安裝mysql-python報(bào)錯(cuò)的話檢查mysql-server mysql-client libmysqlclient15-dev python-dev等是否安裝 配置Sentry生成默認(rèn)路徑的配置文件: $ sentry init #--config自定義文件名 Configuration file created at '/home/ashin/.sentry/sentry.conf.py' 修改配置sentry.conf.py: SENTRY_URL_PREFIX的值設(shè)置為什么那么Sentry的訪問(wèn)地址就必須是什么,,如以localhost為例,,設(shè)置為 運(yùn)行Sentry: $ sentry start #--config自定義文件名 如果是在Running service: 'http'時(shí)報(bào)錯(cuò) [ERROR] Connection in use: ('0.0.0.0', 9000),請(qǐng)檢查9000端口是否被占用,。 如果報(bào)錯(cuò):SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): localhost:9000,,需要在settings中配置ALLOWED_HOSTS=['localhost']。 訪問(wèn)web界面,,登陸后按步驟設(shè)置下后會(huì)生成一個(gè)dsn key 測(cè)試下是否配置成功: Sentry Server上運(yùn)行Bridge to send rsyslog logs to sentry使用https://gist.github.com/avoine/2912777/raw/c5f151fe701d58c33120118daa87c8cee95a7a46/gistfile1.py 插件,,修改其中的dsn和監(jiān)聽(tīng)ip,當(dāng)Test PC發(fā)送syslog到Sentry Server的10514端口時(shí),,該腳本通過(guò)監(jiān)聽(tīng)10514端口,通過(guò)handler調(diào)用raven的api將日志內(nèi)容發(fā)送到sentry import logging from raven import Client from loggerglue.server import SyslogServer, SyslogHandler client = Client(dsn='http://5d8f03027e9e413484d4ce4a9281e4bc:6e5a92d69a8e44b8a93f074db61e6920@localhost:9000/2') #自己sentry的api key PRIVAL_SEVERITY = { 0 : logging.CRITICAL, 1 : logging.CRITICAL, 2 : logging.CRITICAL, 3 : logging.ERROR, 4 : logging.WARNING, 5 : logging.INFO, 6 : logging.INFO, 7 : logging.DEBUG, } PRIVAL_FACILITY = { 0 : "LOG_KERN", 1 : "LOG_USER", 2 : "LOG_MAIL", 3 : "LOG_DAEMON", 4 : "LOG_AUTH", 5 : "LOG_SYSLOG", 6 : "LOG_LPR", 7 : "LOG_NEWS", 8 : "LOG_UUCP", 9 : "LOG_CRON", 10 : "LOG_AUTHPRIV", 16 : "LOG_LOCAL0", 17 : "LOG_LOCAL1", 18 : "LOG_LOCAL2", 19 : "LOG_LOCAL3", 20 : "LOG_LOCAL4", 21 : "LOG_LOCAL5", 22 : "LOG_LOCAL6", 23 : "LOG_LOCAL7", } def prival(prival): sev_num = prival % 8 fac_num = (prival - sev_num) / 8 return (PRIVAL_SEVERITY[sev_num], PRIVAL_FACILITY[fac_num]) class SimpleHandler(SyslogHandler): def handle_entry(self, entry): level, fac = prival(entry.prival) client.name = entry.hostname data = {'level': level, "culprit" : ".".join([fac, entry.app_name]), 'logger' : ".".join([fac, entry.app_name])} client.capture('Message', message=entry.msg, date=entry.timestamp, data=data) s = SyslogServer(('192.168.1.101', 10514), SimpleHandler) # rsyslog->10514->handler->sentry s.serve_forever() 這樣在Test PC上由supervisor產(chǎn)生的日志就會(huì)通過(guò)rsyslog發(fā)送給這個(gè)腳本,,這個(gè)腳本再統(tǒng)一發(fā)給Sentry,,最后同樣的方法將Sentry和該腳本也加入到supervisor中進(jìn)行監(jiān)控。 詳細(xì)參考: http://ashin.sinaapp.com/article/139/ http://ashin.sinaapp.com/article/143/ http://ashin.sinaapp.com/article/144/ http://ashin.sinaapp.com/article/145/ |
|
來(lái)自: SamBookshelf > 《Supervisord》