基础架构部文档
基础架构部文件格式标准参考
技术文档
mr_doc 接入ucenter 认证登录
loki日志收集
https证书与ssl/tls 加密
FTP 主动模式和被动模式的区别
Hadoop-windows10安装部署Hadoop2.7.3
JKS和PFX证书文件格式相互转换方法
KVM 基础操作
k8s nginx ingress日志收集到ELK并分析
Django基础
clash http代理 socks代理服务器搭建 配置
Ubuntu 22.04 安装 FFmpeg v7.0
Office正版化项目的个人体验和心得
重置jenkins构建历史
K8S实施方案
k8s的yaml文件语法
Docker的优势与虚拟机的区别
问题处理文档
HR推送数据问题处理报
Nginx从入门到放弃01-nginx基础安装
Nginx从入门到放弃02-Nginx基本命令和新建WEB站点
Nginx从入门到放弃03-Nginx调优
Nginx从入门到放弃04-Nginx的N种特别实用示例
JMeter教程
01-mariadb编译安装
02-mariadb二进制安装
Docker修改默认的存储路径
01-influxdb2时序数据库简介及安装
02-influxdb2时序数据库核心概念
03-influxdb2时序数据库flux查询语言
04-influxdb2--Python客户端influxdb-client
05-Spring boot 集成influxdb2
06-influxdb2其他知识
OA添加waf后相关问题的解决过程
排除java应用cpu使用率过高
exsi迁移文档
视频测试
阿里云产品试题
超融合服务器和传统服务器的区别
Serv-U问题集锦
文件夹共享操作手册
磁盘脱机处理方案
Office内存或磁盘空间不足处理方法
Cmd中ping不是内部或外部命令的解决方法
ELK 搭建文档
限制用户的远程桌面会话数量
Docker快速安装rocketmq、redis、zookeeper
超融合建设方案
git 入门
HR系统写入ES数据报错403
ELK搭建文档
KVM 安装和基础使用文档
helm 安装 rancher
访问共享提示禁用当前用户解决方法
K8S StorageClass搭建
KVM 扩展磁盘
借助sasl构建基于AD用户验证的SVN服务器
fastdfs编译安装并迁移数据
关闭系统保护的必要性
SCF 前置机部署
阿里云OSS学习文档
阿里云学习文档-VPC
(k8s踩坑)namespace无法删除
rancher-helm安装
zookeeper集群安装
批量替换K8s secrets 中某个特定域名的tls证书
kibana 批量创建索引模式
centos7 恢复Yum使用
ACP云计算部分知识点总结
Loki 日志系统搭建文档
自动更新k8s集群中所有名称空间中特定证书
AI分享
(AI)函数调用与MCP调用的区别
安装戴尔DELL Optilex 7040 USB驱动时提示无法定位程序输入点 kernel32\.dll
新华三服务器EXSI 显卡直通
本文档使用「觅思文档专业版」发布
-
+
首页
k8s nginx ingress日志收集到ELK并分析
# k8s nginx ingress日志收集并分析 ## 版本说明 | 组件名称 | 版本 | | ------------- | -------- | | ELK | 7.9.3 | | filebeat | 7.9.3 | | k8s | v1.24.17 | | ingress-nginx | v1.8.0 | ## 效果图  ## 修改ingress日志输出格式 在ingress-nginx-controller中添加 ```shell log-format-escape-json: true log-format-upstream: | { "@timestamp": "$time_iso8601", "domain": "$server_name", "hostname": "$hostname", "remote_user": "$remote_user", "client": "$remote_addr", "proxy_protocol_addr": "$proxy_protocol_addr", "@source": "$server_addr", "host": "$http_host", "request": "$request_uri", "url": "$uri", "args": "$args", "upstreamaddr": "$upstream_addr", "status": "$status", "upstream_status": "$upstream_status", "size": "$body_bytes_sent", "responsetime": "$request_time", "upstreamtime": "$upstream_response_time", "proxy_upstream_name": "$proxy_upstream_name", "proxy_alternative_upstream_name": "$proxy_alternative_upstream_name", "xff": "$http_x_forwarded_for", "upstream_response_length": "$upstream_response_length", "referer": "$http_referer", "http_user_agent": "$http_user_agent", "request_length": "$request_length", "req_id": "$req_id", "request_method": "$request_method", "request_body": "$request_body", "scheme": "$scheme", "file_dir": "$request_filename", "k8s_namespace": "$namespace", "k8s_ingress_name": "$ingress_name", "k8s_service_name": "$service_name", "k8s_service_port": "$service_port", "https": "$https" } ``` ```shell 备注: log-format-escape-json: true 这个参数表示让nginx日志中的字符都转义后打印 不然传到logstash 中 json插件解析的时候会报错 报错 JSON parse error:Unrecognized character escape ‘x‘ nginx 配置文件中可以用下面的方法改 log_format json escape=json '{"@timestamp":"$time_iso8601",' '"@source":"$server_addr",' '"hostname":"$hostname",' '"ip":"$remote_addr",' '"xff":"$http_x_forwarded_for",' '"client":"$remote_addr",' '"remote_user":"$remote_user",' '"request_method":"$request_method",' '"request_body": "$request_body",' '"scheme":"$scheme",' '"domain":"$server_name",' '"referer":"$http_referer",' '"request":"$request_uri",' '"args":"$args",' '"size":$body_bytes_sent,' '"status": $status,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamaddr":"$upstream_addr",' '"upstream_status": "$upstream_status",' '"http_user_agent":"$http_user_agent",' '"http_host":"$host",' '"url":"$uri",' '"connection_requests": $connection_requests,' '"https":"$https"' '}'; ``` ## 在ingress 机器上部署filebeat ```shell rpm -ivh filebeat-7.9.3-x86_64.rpm cd /etc/filebeat/ ls vim filebeat.yml filebeat.inputs: - type: log enabled: true paths: - /var/log/pods/ingress-nginx_ingress-nginx-controller-*/controller/0.log tags: ["ingress"] fields_under_root: true fields: project: k8s-ingress-prd app: ingress output.logstash: hosts: ["10.7.6.123:5060"] ``` ## logstash 接收日志并格式化 ```shell 2024-02-03T17:07:13.022151969+08:00 stdout F {......} containerd会把我们上面的log_format 格式化的lson日志前面添加时间戳变成text日志 所以我们需要在logstash 中用 grok 匹配 grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} stdout F %{GREEDYDATA:log_message}" } } ``` logstash 配置文件如下 ```shell input { beats { host => "0.0.0.0" port => 5060 } } filter { if [app] == "ingress" { #grok 匹配出日志中的json方便解析 grok { match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} stdout F %{GREEDYDATA:log_message}" } } json { source => "log_message" target => "parsed_log" } #把公网ip匹配出来 grok { match => { "message" => "\"xff\":\"%{IP:remote_ip}" } } #用geoip解析公网地址 geoip { source => "remote_ip" #这个字段一定要在第一层,如果是在第二层parsed_log.xff geoip会识别不到 target => "geoip" database => "/tqls_system/apps/logstash/GeoLite2-City.mmdb" } mutate { remove_field => ["log_message"] add_field => { "[@metadata][target_index]" => "prd-k8s-ingress-%{+YYYY.MM.dd}" } } } else { mutate { add_field => { "[@metadata][target_index]" => "prd-k8s-%{[app]}-%{+YYYY.MM.dd}" } } } } output { elasticsearch { hosts => ["10.7.6.219:9200"] index => "%{[@metadata][target_index]}" } } ``` ## 画热力图 在画热力图时有个坑 >https://www.zhihu.com/tardis/bd/art/412912721?source_id=1001 > >根据官方文档的指引,想要在Kibana中使用地图相关的功能,在索引里面必须包含`geo_point`类型的字段。被正确识别的es内容在Kibana中会被展示为如下的样子...... > >但当我们通过修改logstash配置文件,把日志内容存储到`logstash-nginx-log-*`,我们会看到,`geoip.location`会被自动识别成geo_point类型...... 我们的索引名称是 prd-k8s-ingress-* elasticsearch在处理这种自定义的索引的时候,如果没有额外进行设置,会默认把`geoip.location`这一字段存储为float或者string 我们需要新建模板 在开发工具里控制台里运行以下代码 ```shell PUT /_template/ingress { "order" : 0, "template": "ingress" , "version" : 60001, "index_patterns" : [ "prd-k8s-ingress-*" ], "settings" : { "index" : { "number_of_shards" : "1", "refresh_interval" : "5s" } }, "mappings" : { "dynamic_templates" : [ { "message_field" : { "path_match" : "message", "mapping" : { "norms" : false, "type" : "text" }, "match_mapping_type" : "string" } }, { "string_fields" : { "mapping" : { "norms" : false, "type" : "text", "fields" : { "keyword" : { "ignore_above" : 256, "type" : "keyword" } } }, "match_mapping_type" : "string", "match" : "*" } } ], "properties" : { "@timestamp" : { "type" : "date" }, "geoip" : { "dynamic" : true, "properties" : { "ip" : { "type" : "ip" }, "latitude" : { "type" : "half_float" }, "location" : { "type" : "geo_point" }, "longitude" : { "type" : "half_float" } } }, "@version" : { "type" : "keyword" } } }, "aliases" : { } } ``` ```shell #获取全部模板 GET /_template/* #获取某一模板的具体信息 GET /_template/logstash #删除模板 DELETE /_template/api ```
杨超
2024年2月4日 08:58
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期