nginx日志的loki面板
来源:原创
时间:2021-08-26
作者:脚本小站
分类:云原生
nginx-ingress-controller loki grafana dashboard:
https://grafana.com/grafana/dashboards/12559
在kubernetes的环境中安装如下:
安装loki:
helm repo add loki https://grafana.github.io/loki/charts kubectl create ns loki helm upgrade --install loki loki/loki-stack -n loki
配置nginx的日志格式:
kubectl edit configmaps -n kube-system nginx-configuration
内容如下:
apiVersion: v1
data:
log-format-upstream: '{"msec": "$msec", "connection": "$connection", "connection_requests":
"$connection_requests", "pid": "$pid","request_id": "$request_id", "request_length":
"$request_length", "remote_addr": "$remote_addr","remote_user": "$remote_user","remote_port":
"$remote_port","time_local": "$time_local","time_iso8601": "$time_iso8601","request":
"$request","request_uri": "$request_uri","args": "$args","status": "$status","body_bytes_sent":
"$body_bytes_sent","bytes_sent": "$bytes_sent","http_referer": "$http_referer","http_user_agent":
"$http_user_agent","http_x_forwarded_for": "$http_x_forwarded_for","http_host":
"$http_host","server_name": "$server_name", "request_time": "$request_time","upstream":
"$upstream_addr","upstream_connect_time": "$upstream_connect_time","upstream_header_time":
"$upstream_header_time","upstream_response_time": "$upstream_response_time","upstream_response_length":
"$upstream_response_length","upstream_cache_status": "$upstream_cache_status","ssl_protocol":
"$ssl_protocol","ssl_cipher": "$ssl_cipher", "scheme": "$scheme","request_method":
"$request_method","server_protocol": "$server_protocol","pipe": "$pipe","gzip_ratio":
"$gzip_ratio","http_cf_ray": "$http_cf_ray","geoip_country_code": "$geoip_country_code"
}'
kind: ConfigMap
metadata:
labels:
app: ingress-nginx
name: nginx-configuration
namespace: kube-systemgrafana 8.0:
安装 worldmap panel 插件:
grafana-cli plugins install grafana-worldmap-panel
重启grafana
systemctl restart grafana-server.service
地图显示不出来解决方法:
到grafana安装的机器:
cd /var/lib/grafana/plugins/grafana-worldmap-panel/
将:
https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png替换成:
http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png将:
https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png替换成:
http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png然后在grafana中可以看到地图可以正常加载。
在普通nginx中使用此面板操作如下:
首先安装loki服务:scriptjc.com/article/1277
这里用到了Geo模块:
cat > /etc/yum.repos.d/nginx.repo <<EOF [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 EOF yum -y install geoip-devel # 安装Geo库 yum install nginx-r1.20.1 nginx-module-geoip # nginx和Geo模块可能
在nginx.conf中加载geo模块和引用Geo库:
# 加载模块配置放在配置文件开头位置
load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
}Geo nginx官方文档:
http://nginx.org/en/docs/http/ngx_http_geoip_module.html
修改nginx的日志格式:
log_format json_analytics escape=json '{'
'"msec": "$msec", '
'"connection": "$connection", '
'"connection_requests": "$connection_requests", '
'"pid": "$pid", '
'"request_id": "$request_id", '
'"request_length": "$request_length", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"remote_port": "$remote_port", '
'"time_local": "$time_local", '
'"time_iso8601": "$time_iso8601", '
'"request": "$request", '
'"request_uri": "$request_uri", '
'"args": "$args", '
'"status": "$status", '
'"body_bytes_sent": "$body_bytes_sent", '
'"bytes_sent": "$bytes_sent", '
'"http_referer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_host": "$http_host", '
'"server_name": "$server_name", '
'"request_time": "$request_time", '
'"upstream": "$upstream_addr", '
'"upstream_connect_time": "$upstream_connect_time", '
'"upstream_header_time": "$upstream_header_time", '
'"upstream_response_time": "$upstream_response_time", '
'"upstream_response_length": "$upstream_response_length", '
'"upstream_cache_status": "$upstream_cache_status", '
'"ssl_protocol": "$ssl_protocol", '
'"ssl_cipher": "$ssl_cipher", '
'"scheme": "$scheme", '
'"request_method": "$request_method", '
'"server_protocol": "$server_protocol", '
'"pipe": "$pipe", '
'"gzip_ratio": "$gzip_ratio", '
'"http_cf_ray": "$http_cf_ray",'
'"geoip_country_code": "$geoip_country_code"'
'}';
access_log /var/log/nginx/json_access.log json_analytics;配置promtail来读取nginx日志:
server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://192.168.199.20:3100/loki/api/v1/push # loki服务端地址 scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/nginx/*log
在grafana中添加数据源,导入面板即可。
