引言
1 | 最近趁着开发需求较少,着手整理了一段时间关于系统监控的东西,系统监控的目的就是为了快速的发现系统问题、找到问题所在、并 |
初识监控
懵懂
1 | 记得当初来公司的时候,师傅让我在代码关键的部位打日志,初来乍到,以为日志嘛,还按照上边的写的例子接着写得了。学习期间 |
第一次使用日志
1 | 好景不长,没多久就出了一个很奇怪的问题,大部分情况下系统正常,但是总有意外发生(而且是事后一段时间后才发现,因为当时 |
如何打
1 | 原则,不能因为添加监控而导致服务质量大幅度下滑, 打关键点不乱打 |
开始谈这段时间的结果
1 | 上边说的有点废话,但是对于刚毕业的学生来讲,很多人会遇到这样的情况,下边开始说说这段时间是怎么来监控我们的系统的。 |
报错邮件的添加
重要性
1 | 我们知道在稳定的系统,都有可能因为这样或那样的问题(硬件、网络等问题)导致出错,尤其是在系统中调用第三方接口的代 |
添加报警模块
1 | 之前我写过一篇文章,是如何利用sentry(采用Django开发,当然有其他的可以留言讨论)来监控系统,如下是连接,sentry |
Api响应时间的监控
必要性
1 | 关于api的响应时间监控显然很重要,如果你能实时或准实时的看到你写的接口的响应时间的话,你就会很有目的性的去优化你的 |
准实时监控
1 | 我叫它准实时因为过一小段时间后我们才能知道结果。 |
利用nginx日志
1 | 在nginx日志中可以根据$request_time(全程的时间:从用户点击到所有结果返回)和$upstream_response_time(Nginx |
利用diamond
1 | diamond是可以实现类似于定期任务的工具,可以监控系统内存、CPU使用情况等等,你可以事先写好代码片段去请求自己的接口, |
实时监控
1 | 个人觉得最好只监控api中的关键部位,因为他将会影响api的整体 |
利用Metrology
1 | import time |
关键部位info日志添加
重要性
1 | 有时候你会遇到这样的问题:api响应时间超短,也没有报错邮件,但是就是结果不对。这一般是返回结果出了问题,遇到最多 |
在api中关键断码段打印日志
使用sentry
1 | sentry除了能监控error日志,还能收集info日志,你可以尝试使用。但是sentry打的info日志会有很多额外的信息。可以 |
使用rsyslog
1 | 该方法比较通用,不论在什么开发语言和框架下,基本上都支持对rsyslog的 |
收集远程日志
1 | 前边说了日志打印,下边说一下如何收集这些日志。 |
服务器写传输脚本,定期执行
1 | 有点low,但也不失为一种办法 |
使用rsyslog
1 | 当然如果你使用的是使用的是sentry收集info日志,你不用操心怎么收集,因为sentry都帮你做好了。如果是使用的rsyslog的 |
使用syslog-ng收集
1 | syslog-ng收集日志的方式和rsyslog一样都是走514端口,但是syslog-ng可以很方便的根据关键词帮你进行日志过滤,这样的 |
使用ELK
1 | 使用ELK,何为ELK: |
总结
1 | 至此,从error监控、api响应时间监控、关键代码段响应时间监控、info日志打印四个角度对webServer做了多方位的监控,这 |