Fork me on GitHub

orange网关原理的源码分析

背景

Orange v0.6.0版本是一个重构版本, 着重为了解决之前版本在有大量规则配置时性能损耗的问题。 基本的设计思路是将原来的规则细分成两层, 第一层叫做selector, 用于将流量进行第一步划分, 在进入某个selector后才按照之前的设计进行规则匹配, 匹配到后进行相关处理。

https://lengrongfu.github.io/2019/05/21/orange-%E5%8E%9F%E7%90%86/

https://book.aikaiyuan.com/openresty/understanding-orange.html

https://zhuanlan.zhihu.com/p/67481992

生产单机部署

生产集群部署

配置更新

日志切割

Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。本文将详细描述一下如何配置Nginx日志。

访问日志主要记录客户端的请求。客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。当然具体要记录哪些信息,你可以通过log_format指令定义。

错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。

Nginx中通过access_log和error_log指令配置访问日志和错误日志,通过log_format我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过open_log_file_cache指令来设置缓存,提升性能。

access_log,level表示日志等级,日志等级分为[ debug | info | notice | warn | error | crit ],从左至右,日志详细程度逐级递减,即debug最详细,crit最少

error_log level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值。可以看到其取值范围是按紧急程度从低到高排列的。只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error。

orange中日志和默认配置

orange项目logs/目录下面有日志文件:

1
2
3
4
5
6
7
8
9
10
11
12
# 主日志
access.log
error.log
# orange管理界面日志
dashboard_access.log
dashboard_error.log
# 管理api接口日志
api_access.log
api_error.log
#
default_upstream_access.log
default_upstream_error.log

在配置文件conf/nginx.conf中这样定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
http {
# ...
access_log ./logs/access.log main;
error_log ./logs/error.log info;
# ...

server {
listen 8001;
access_log ./logs/default_upstream_access.log main;
error_log ./logs/default_upstream_error.log;
}
server {
listen 9999;
access_log ./logs/dashboard_access.log main;
error_log ./logs/dashboard_error.log info;
}
server {
listen 7777;
access_log ./logs/api_access.log main;
error_log ./logs/api_error.log info;
}
}

日志切割

日常运维中orange的日志文件随着时间逐渐增多,日志单文件较大不方便日常文件生命周期清理。所以需要对原日志进行切割,每日一个日志文件。

常见方法有:

  • 使用shell脚本重命名日志文件,使用crontab定时调用该脚本。
  • 使用logrotate工具。

nginx 0.7.6版本开始access_log的路径配置可以包含变量。

建议的配置:

1
2
3
4
5
6
7
8
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}

access_log logs/access-$logdate.log main;
error_log ./logs/error-$logdate.log info;
open_log_file_cache max=10;

https://jingsam.github.io/2019/01/15/nginx-access-log.html

参考文献及资料

[1] Orange官网,链接:http://orange.sumory.com/

[2] Orange网关官网docker,链接:https://hub.docker.com/r/syhily/orange

0%