web-log-analyst 🐌 Nginx日志分析处理监控
小工具功能用途的简单描述
一个简单的日志分发、存储、监控、展示的小工具,当然你也可以将任何你关注的信息,集中到这里进行展示。其中 log_distribution.py
用来分发日志数据,变相的实现了多日志监控的效果;analyzer_threading.py
和 analyzer_multiprocessing.py
是利用进程以及线程的特性,对日志进行了收集、聚合、发送的效果(在 python
中,threading
多线程都是运行在一个进程当中的,所以对于多核 CPU
并没有发挥其性能;相对而言,multiprocessing
多进程可以充分利用操作系统的性能)。将数据存储在 influxdb
流式数据库中,并利用 grafana
进行`展示,当然这里你也可以使用其他的数据库展示工具都是可以的。
通过流程图直观的解释项目的分析过程
注释:没有提供所需的 Nginx 日志文件,使用时需要结合自己的真实适用场景进行合理规划。
对于 Web
服务器的日志输出,是由我们指定的,既可以更多的记录站点的信息也可以大致的做一下记录。当然,最重要信息肯定也是必不可少的。如下,列出了比较重要的日志记录信息。
IP
地址- 用户访问时间戳
- 请求方式
URL
地址- 浏览器版本
- 服务器返回状态
- 返回字节长度
referer
UserAgent
通过对于 Nginx
日志的分析,我们可以得到很多东西,不只是我下面表格列出的这几条。分析得到的结果,可以有助于我们来优化网站性能、统计网站访问量以及实时展示有很大的帮助。
编号 | 获取到的内容 | 如果统计 | 如何展示 |
---|---|---|---|
1 | 平均时间的流量 | sum | line char |
2 | 平均响应时间 | sum | line char |
3 | top 10 URL | count | bar chat |
4 | top 10 IP | count | bar char |
5 | top 10 UserAgent | count | bar char |
6 | 响应状态的分布 | group by | pie chat or stack chat |
7 | UserAgent 的分布 | group by | pie chat or stack chat |
8 | HTTP 版本的分布 | group by | pie chat or stack chat |
为了便于理解,下图实例了一下,对应的数据结构便于理解和学习。
用途
InfluxDB
用Go
语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方- 类似的数据库有
Elasticsearch
、Graphite
等 - 一般用来储存实时数据,配合一套
UI
界面来展示信息
安装
# 配置yum安装源
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
# 安装influxdb以及启动
sudo yum install influxdb
sudo systemctl start influxdb
# 在浏览器中输入 localhost:8083 即可进入web管理页面
用途
- 图形化动态展示
安装
# 配置yum安装源
[grafana]
cat <<EOF | sudo tee /etc/yum.repos.d/grafana.repo
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
# 安装influxdb以及启动
sudo yum install grafana
sudo systemctl start grafana-server
sudo systemctl status grafana-server
# 在浏览器中输入 localhost:3000 即可进入web管理页面
influxdb 存储数据
grafana 监控展示
使用 Docker 进行快速构建
# 生成数据
$ python3 script/log_distribution.py data/grpc.access.log egg/1.log egg/2.log egg/3.log
# 解析数据并推送到influxdb里面
$ python3 script/analyzer_multiprocessing.py egg/1.log egg/2.log egg/3.log
$ python3 script/analyzer_threading.py egg/1.log egg/2.log egg/3.log
- 💭 [Name]1 💭
- 🐠
EscapeLife
😏
- 🐠
- 💭 [Induction]2 💭
- 🏦
Focusing P.A.I
😂
- 🏦
- 💭 [Email]3 💭
- 💭 [Myblog]4 💭
- 💭 [License]5 💭