作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。
我们流量镜像里面定义了2个日志文件,这个小节就来专门讲解这个Linux的日志,我们通过yum安装的Nginx会通过Linux系统自带的logrotate进行自动轮转,但是通过编译安装的则不会进行轮转,当然我们可以通过任务计划方式进行轮转。但是无论是哪种方式日志均会存储在一个文件,如果存在多个域名我们分析日志的时候就不很方便,所以需要对日志进行区分。
1.定义多个日志格式
我们可以根据需要对日志进行调整,只记录自己关心的部分。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format mirror_log '$time_iso8601 [Mirror] "$request" '
'Sent to: $upstream_addr Status: $status';
2.定义多种格式日志
有的时候为了更好的分析日志,需要对日志格式进行调整,比如调整为json格式。
log_format main_json escape=json
'{'
'"timestamp": "$time_iso8601",'
'"remote_addr": "$remote_addr",'
'"host": "$host",'
'"request": "$request",'
'"status": "$status",'
'"body_bytes_sent": "$body_bytes_sent",'
'"request_time": "$request_time",'
'"http_referer": "$http_referer",'
'"http_user_agent": "$http_user_agent",'
'"http_x_forwarded_for": "$http_x_forwarded_for",'
'"upstream_addr": "$upstream_addr",'
'"upstream_response_time": "$upstream_response_time"'
'}';
3.引用日志格式
如果不做任何引用,则日志默认会匹配Nginx主配置文件的规则,所有日志就会混在一起,不方便分析。
access_log /var/log/nginx/access.log main;
如果为每个独立的网站(Server)定义一个日志规则,就类似下面这样
server {
listen 80;
server_name abc.com;
access_log /var/log/nginx/abc.com.log main_json;
....
}
为每个独立的路径(location)定义日志规则。
location /abcd {
proxy_pass http://mirror_backend;
# 传递必要请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /var/log/nginx/abcd.log main;
}
通过以上方式的配置,我们定义了多种日志格式,并且根据不同的网站设置不同的日志,甚至对每个目录设置一个日志文件,方便进行日志分析。也可以通过这种方式把日志文件这个容易出现超大的情况通过网站来进行分割开来,然后在做进一步的切分。实现更好的运维这个Nginx服务器。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。