前提需要安装好 ELK 集群和 Grafana,ELK 安装可以参考Linux 搭建 ELK+Filebeat+Nginx+Redis 分布式日志管理平台。
一、配置 Nginx 日志输出格式
# 编辑 nginx.conf,内容如下
[root@master ~]# vim /usr/local/nginx/conf/nginx.conf
log_format json ‘{“@timestamp”:”$time_iso8601″,’
‘”host”:”$server_addr”,’
‘”ip”:”$remote_addr”,’
‘”clientip”:”$remote_addr”,’
‘”remote_user”:”$remote_user”,’
‘”request”:”$request”,’
‘”http_user_agent”:”$http_user_agent”,’
‘”size”:$body_bytes_sent,’
‘”responsetime”:$request_time,’
‘”upstreamtime”:”$upstream_response_time”,’
‘”upstreamhost”:”$upstream_addr”,’
‘”http_host”:”$host”,’
‘”requesturi”:”$request_uri”,’
‘”url”:”$uri”,’
‘”domain”:”$host”,’
‘”xff”:”$http_x_forwarded_for”,’
‘”referer”:”$http_referer”,’
‘”status”:”$status”}’;
access_log logs/access.log json;
注意:这里的Nginx 配置所有访问日志,统一在/usr/local/nginx/logs/access.log。
如果你的环境,单独为每一个虚拟主机分配了 access 日志,那么就需要在对应的虚拟主机配置文件,应用格式 json 即可。
二、配置 Logstash
注意:本文采用Filebeat+Logstash 采集 nginx 日志,并发送给 Elasticsearch。
[root@master ~]# cat /etc/logstash/conf.d/nginx.conf
input {
redis {
host => “172.27.5.51”
port => “6379”
db => “0”
password => “Aa123456”
data_type => “list”
key => “nginx-access-log”
codec => “json”
}
}
filter {
if [fields][logtype] == “nginx-access-log” {
json {
source => “message”
}
mutate {
convert => [ “status”,”integer” ]
convert => [ “size”,”integer” ]
convert => [ “upstreamtime”,”float” ]
convert => [ “[geoip][coordinates]”,”float” ]
remove_field => “geoip.continent_code”
remove_field => “geoip.country_code2”
remove_field => “geoip.country_code3”
}
date {
match => [ “timestamp” ,”dd/MMM/YYYY:HH:mm:ss Z” ]
}
geoip {
source => “ip”
target => “geoip”
database =>”/usr/share/logstash/GeoLite2-City_20221206/GeoLite2-City.mmdb”
add_field => [ “[geoip][coordinates]”, “%{[geoip][longitude]}” ]
add_field => [ “[geoip][coordinates]”, “%{[geoip][latitude]}” ]
}
mutate {
remove_field => “timestamp”
}
}
}
output {
if [fields][logtype] == “nginx-access-log” {
elasticsearch {
hosts => [“172.27.5.51:9200”]
user => “elastic”
password => “www.yangxingzhen.com”
action => “index”
index => “nginx-access-log-%{+YYYY.MM.dd}”
}
}
}
注意:/usr/share/logstash/GeoLite2-City_20221206/GeoLite2-City.mmdb,这个是地图数据文件。
GeoLite2-City.mmdb 是 IP 信息解析和地理定位的。官方下载地址: https://www.maxmind.com。
下载文件完成后,将此文件上传到/usr/share/logstash/GeoLite2-City_20221206目录。
三、配置 Grafana
1、访问 Grafana,配置 Elasticsearch 数据源
2、配置 ES 相关信息
注意:如果 elasticsearch 需要认证,在下面的 Auth 设置中,Basic auth 开启,输入用户名和密码。
3、配置 ES 索引信息
4、Grafana 安装插件
[root@master ~]# grafana-cli plugins install grafana-piechart-panel
[root@master ~]# grafana-cli plugins install grafana-worldmap-panel
# 安装完成后,重启 Grafana 生效。
[root@master ~]# systemctl restart grafana-server
5、配置展示模板
1)输入模板 ID,然后点击 Load
2)模板效果展示
至此,ELK+Grafana 分析 Nginx 日志配置完成。