我最近发现了https://12factor.net/-除日志记录要求外,一组生产环境要求看起来非常合理。
https://12factor.net/logs表示日志应转到STDOUT。WAT?为什么?
最近7年以来,我主要从事管理工作,一定错过了一些东西。但是我确实清楚地记得那STDERR是为达到这个确切目的而设计的-单独作为诊断信息流。它已经使用了数十年。
为什么要打破常规?
我确实记得默认情况下所有HTTP服务器都配置为将STDOUT发送到浏览器(客户端),并将STDERR发送到日志文件。到处都是。对于大多数环境而言,这是显而易见的默认设置。我的第一个想法是他们认为12因子标准的作者犯了一个错误。
我想念什么?为什么要将日志发送到STDOUT?
请不要告诉我,现代的Web应用程序没有“正常输出”。首先,他们这样做了,其次,这并不符合打破数十年来一直有效且仍然完全符合目的的惯例的理由。
非常感谢您的想法。谢谢。
所以,我想nginx在请求时解析后端的主机名。我希望HTTP 502 Bad Gateway在后端服务关闭时得到响应,并且在它启动时得到服务响应。
我使用nginx:1.15-alpine图像nginx,这是我在它的配置中所拥有的:
server {
resolver kube-dns.kube-system.svc.cluster.local valid=5s;
server_name mysystem.com;
listen 80;
client_max_body_size 20M;
location = /nginx_status {
stub_status on;
access_log off;
}
# Services configuration
location ~ /my-service/ {
set $service_endpoint http://my-service.namespace:8080;
proxy_pass $service_endpoint$request_uri;
include includes/defaults-inc.conf;
include includes/proxy-inc.conf;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我向 nginx 发出请求时,我收到 502 Bad Gateway 响应。Nginx 的日志说找不到名称:
2018/06/28 19:49:18 [error] 7#7: *1 my-service.namespace could not be resolved (3: Host not found), client: 10.44.0.1, server: mysystem.com, request: "GET /my-service/version …Run Code Online (Sandbox Code Playgroud)