ngx_http_accounting_module的解析
This project is maintained by wangfakang
对NGX_HTTP_ACCOUNTTING_MODULE的分析:
http{
http_accounting on; # turn on accounting function
...
server {
server_name example.com;
http_accounting_id accounting_id_str; # set accounting_id based on server
...
location / {
http_accounting_id accounting_id_str; # set accounting_id based on location
...
}
}
}
上面的配置就启用了ngx_http_accountting的功能.那么该模块的功能是啥恩?该模块可以作为不同server级别location级别的流量统计, 启动nginx后,日志会记录到系统日志,/var/log/message,类似:
May 1 17:32:25 localhost NgxAccounting: pid:195|from:1368783525|to:13683555|accounting_id:test|requests:30|bytes_out:882066|200:30
May 1 17:53:45 localhost NgxAccounting: pid:196|from:1368784635|to:13684665|accounting_id:test|requests:1|bytes_out:4087|200:1
当然也可以配置独立的log来进行存储:
echo "syslog.* /var/log/syslog" >> /etc/syslog.conf
service syslog restart
void openlog(const char*ident ,int option,int facility)
参数一:ident:表示的字符串会加载到每一行的日志信息当中
参数二:表示一些设置选项
参数说明:
LOG_CONS 如果将信息发送给syslogd守护进程时发生错误,直接将相关信息输出到终端
LOG_NDELAY 立即打开与系统日志的连接(通常情况下,只有在产生第一条日志信息的情况下才会打开与日志系统的连接)
LOG_NOWAIT 在记录日志信息时,不等待可能的子进程的创建
LOG_ODELAY 类似于LOG_NDELAY参数,与系统日志的连接只有在syslog函数调用时才会创建
参数说明
LOG_PERROR 在将信息写入日志的同时,将信息发送到标准错误输出(POSIX.1-2001不支持该参数)
LOG_PID 每条日志信息中都包括进程号
参数三:facility表示rsyslog.conf中前面所配置的,意思表示日志信息 的来源 类型
facility参数 syslog.conf中对应的facility取值
LOG_KERN kern
LOG_USER user
LOG_MAIL mail
LOG_DAEMON daemon
LOG_AUTH auth
LOG_SYSLOG syslog
LOG_LPR lpr
LOG_NEWS news
LOG_UUCP uucp
LOG_CRON cron
LOG_AUTHPRIV authpriv
LOG_FTP ftp
LOG_LOCAL0~LOG_LOCAL7 local0~local7
原型:
void syslog(int priority,const char*format,…)
参数一:priority表示消息的级别
priority参数 syslog.conf中对应的level取值
LOG_EMERG emerg 表示最紧急的信息
LOG_ALERT alert 紧急信息
LOG_CRIT crit 重要信息
LOG_ERR err 错误信息
LOG_WARNING warning
LOG_NOTICE notice 普通重要信息
LOG_INFO info 通知性消息
LOG_DEBUG
LOG_NONO debug
nono 没有重要性 不记录任何日志信息
参数二:表示消息的格式 之后是所要发送的信息
在syslog的配置文件中:
在进行配置什么来源以及什么级别的日志 写入什么文件当中, 在文件路径的前面加"-"减号的时候:其含义是先将其写入缓存,然后在写入磁盘文件.
这样可以提高性能,但是有些不安全 由于有可能某个时候机器宕机了,则机器中缓存的数据就丢失了.
The output contains a list of k/v for the accounting metrics, in the sequence of:
key meaning
pid pid of nginx worker process
from / to metric was collected between these timestamps
accounting_id identify for the accounting unit, you name it with http_accounting_id directive
requests count of total requests processed
bytes_in total bytes receiverd by the server
bytes_out total bytes send out by the server
latency_ms a sum of $request_time, in millisecond
upstream_latency_ms a sum of $upstream_response_time, in millisecond
200 / 302 / 400 / 404 / 500 ... count of requests which response is with http code 200/302/400/404/500, etc
其中WORK_PROCESS_INTERVAL 默认值是30
ngx_http_accounting_work_process_init
|
\|/
ngx_add_timer(write_out_ev,WORK_PROCESS_INTERVAL*(rand()%200)) 最开始最多等6秒钟
|
\|/
write_out_ev有一个handler,其指向work_process_alarm_handler
|
\|/
ngx_http_accounting_hash_iterate ngx_add_timer(write_out_ev,WORK_PROCESS_INTERVAL*1000) 后续每隔30秒输出一次
|
\|/
上面函数主要就是调用openlog syslog其相应函数进行写syslog.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流