前言

目前作为小站长而言,由于流量小访问少,可能系统优化并不是显得非常重要。但是随着流量逐渐增加之后,亦或者是网站受到攻击时,再去优化可能时间就会不够充裕。

未雨绸缪总是最好的选择,这里分享一些近期个人建站时用到和在用的工具。
本次主要介绍如何记录及查询请求日志。

Nginx 日志分析

从阿里云体系的内容说起,首先便是最容易搭建也较为有用的 Nginx 日志。

Nginx 作为整个集群的唯一的流量入口,承担了所有 80 及 443 端口的访问流量,无论绑定了几个域名,开放了几个服务,使用哪种请求方法,只要有 Nginx 日志,就能分析出流量的来源、耗时等信息。

Nginx 日志通常是使用文件进行存储的,而这就可能会使得单机的磁盘占用越来越大,而且在机器宕机时,本地的文件可能会无法打开。此时就可以尝试使用 NAS 来存储日志文件。

涉及的阿里云服务如下:

  • NAS 存储
  • 简单日志
  • ECS 云助手

简单说下这些服务的用途。

文件存储 NAS

文件存储 NAS,创建一个 文件系统 用来长期保存日志文件(也可以顺便保存些别的东西),存储类型选择 SSD 可以拥有更好的性能,Linux 主机的话选择 NFS 协议类型,并绑定一个乞丐版的存储包(5G 的空间一年只要 18 块钱)。

参考阿里云官方文档将创建的这个存储包挂在至运行 Nginx 的主机上,并启用 Nginx 的 访问日志 及 错误日志 等功能。
下面可以给出一个我的配置案例。

# 其他配置项略

error_log  /your-nas-path/error.log;

http {
    include         mime.types;
    default_type    application/octet-stream;
    log_format      main    '$remote_addr - $remote_user [$time_local] "$request" $http_host '
                            '$status $request_length $body_bytes_sent "$http_referer" '
                            '"$http_user_agent"  $request_time $upstream_response_time';
    access_log          /your-nas-path/access.log  main;

    # 其他配置项略
}

日志正常开始记录后,最基本的数据就已经有了,但是直接查文件日志是非常困难和不便的,所以我们需要一个免费的服务帮我们简化这个过程。

简单日志

闻其名而知其意,“简单”是这个服务的特点之一。创建一个 Project,建立一个 Logstore 就可以用来存放日志了。一般考虑到小站长(如我)经费一般不会很足,所以可以关闭 永久保存,Shard数目 设置为 1 往往也是够用的,自然更不需要开通 自动分裂shard 。

只是创建上面这些项目比较方便,并不足以表达“简单”二字。他的“简单”主要是收集日志的过程真的很容易,不需要你有很复杂的运维技巧,只用填写一些配置项,就能自动完成日志的收集。

通过 数据接入向导,选择 自建软件 中的 Nginx访问日志,给配置其一个名字,然后填写日志存储的路径(上文配置中的 /your-nas-path/access.log),最后在 NGINX日志格式 中,将 log_format 贴上去,保存就可以。剩下就是根据“下一步”的指示创建机器组,让收集器 agent 可以正常的运行,仅需等待几秒钟,日志就可以直接查到了,非常方便。而这个过程,小站长可能一分钱都不需要花。

ECS 云助手

完成上述两个步骤后,其实已经可以正常收集与查询日志了,那为什么我们还需要再分享一个“云助手”的工具呢?

那是因为仅根据常规的设置,Nginx 的日志只会记录到一个文件中,不会主动、自动的做切割,时间长了这个文件可能会变得非常大,所以我们通过一个简单、并且方便运维的方式,运行切割日志的脚本。

创建的方法非常简单,在 云服务器 ECS 的左侧菜单中就存在 云助手 这个选项,通过它可以管理这个机器上的所有常用脚本。

这里贴出我用来切割日志文件的一个简单脚本以供参考。

# /bin/bash
mkdir -p /your-nas-path/$(date -d yesterday +"%Y%m")
mv /your-nas-path/access.log /your-nas-path/$(date -d yesterday +"%Y%m")/access_$(date -d yesterday +"%d").log
openresty -s reopen

这个脚本的作用的意图是,每天执行一次,将当前日志文件按月进行归档,并将当前文件的名字改为“昨天”,这样当新日志通过 Nginx 再次被记录时,当前的日志就会重新写入新的 access.log 中。仅仅写完这个脚本,并无法定期在每天凌晨去执行,所以还需要在保存脚本后点一下 执行 按钮,以 周期执行 的方式来让系统自动执行脚本即可。

通过以上这些介绍,就可以轻松建立起基于 Nginx 日志的分析体系,当系统遇到异常时,便可以通过查询这些日志来辅助定位问题,做到“永远不要让生产环境的系统成为黑盒子”的第一步。

阿里云简单日志分析 Nginx 日志文件时,不仅仅可以提供日志详情的查询功能,更会提供强大的 仪表盘 功能,通过极为简单的设置,默认就可以拥有 来源IP分布请求状态占比请求方法占比访问PV/UV统计流入流出流量统计请求UA占比前十访问来源请求时间统计请求时间前十地址访问前十地址 这些重要的图表。

文章目录