filebeat采集nginx日志

news2025/1/13 13:06:07

背景

我们公司项目组用的是elastic的一整套技术栈,es,kibana,filebeat和apm,目前已经可以采集网关+各个微服务的日志。

架构图

现在需要在原来的基础上把nginx这的日志也采集上来,方便做链路跟踪

问题与思路

原先traceId是在网关这层产生并且传递下去,因为nginx并不是java实现,没办法用agent方式处理,那么如何在nginx这层产生traceId 并且传递下去?

想到2种解决办法

nginx在1.11版本之后可以在http的header头设置request。

参考nginx 文档 http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id

那么解决起来就简单了,在nginx开始的时候设置requestId,注意header里面的key必须是服务elastic的APM规范,让他可以识别出来是trace id。(这边只是给下思路,并没有实际去操作)

在响应的response设置traceid

因为nginx是在请求结束才打印日志,那么可以在gateway写一个filter,在response设置traceId,然后去nginx就可以获取的到traceid

思路二实战

设置nginx的日志格式

vi /{nginx_home}/conf/nginx.conf

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $request_time $request_length $bytes_sent $body_bytes_sent '
                      '$http_host $sent_http_traceid '
                      '"$upstream_addr" "$upstream_status" "$upstream_response_time" '
                      '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  main;

设置nginx输出的日志格式 主要关注 $sent_http_traceid 用来获取header里的traceid

修改完文件之后 记得重新加载 ./nginx -s reload

设置filebeat采集nginx日志

filebeat.inputs:
- type: log #多类日志需定义多个type
  enabled: true
  paths:
    - D:\nginx-1.23.2\logs\access.*
  exclude_files: ['\.gz$']
  encoding: utf-8
  fields:
    service_name: test1
    service_environment: test
    type: nginx.access
  ####### nginx error 日志文件 ########
- type: log
  enabled: true
  paths:
    - D:\nginx-1.23.2\logs\error.*
  exclude_files: ['\.gz$']
  encoding: utf-8
  fields:
    service_name: test1
    service_environment: test
    type: nginx.error

这边只展示了nginx的日志采集的input,主要是注意修改nginx的日志目录

在网关项目添加代码

添加maven依赖

 <dependency>
    <groupId>co.elastic.apm</groupId>
    <artifactId>apm-agent-api</artifactId>
    <version>1.30.1</version>
</dependency>

增加filter,在请求头添加traceId

import cn.hutool.core.collection.ListUtil;
import co.elastic.apm.api.ElasticApm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
/**
 * 设置trace id
 */
@Component
@Order(3)
@Slf4j
public class ApmTraceIdFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        String apmTraceId = ElasticApm.currentTransaction().getTraceId();;
        exchange.getResponse().getHeaders().put("traceid", ListUtil.toList(apmTraceId));
        log.info("ApmTraceIdFilter设置trace.id:{}",apmTraceId);
        return chain.filter(exchange);
    }

}
如果WebFilter获取不到trace.id,那么可以试试用spring cloud gateway的 filter
key必须是traceid,和前面nginx的sent_http_traceid有关联

以上都做完各自重启查看效果

最终效果

先查看nginx的日志

很好,已经获取到traceid

然后去kibana看整体的效果

搞定,下班

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字经济时代,“8K+”开拓行业新格局

2023深圳国际8K超高清视频产业发展大会召开&#xff0c;大会以“超清互联 数智创新”为主题&#xff0c;汇聚两院院士、产业领袖、领军企业共同深入探讨超高清产业发展现状、关键问题和未来趋势&#xff0c;并集中发布《深圳市超高清视频显示产业白皮书&#xff08;2023版&…

「数据密集型系统搭建」开卷篇|什么是数据密集型系统

在我们开发的诸多系统&#xff0c;基本都可以视为“数据密集型系统”&#xff0c;数据是一切物质的载体&#xff0c;我们依靠数据做存储记录&#xff0c;通过数据进行信息传递交换&#xff0c;最终还要数据来呈现和展示等&#xff0c;从一定视角而言&#xff0c;系统中最核心、…

临时用网搞不定?别着急,5G网络“急救车”来啦

如何在1天时间内&#xff0c;用不超过5名装维人员&#xff0c;完成超过200间宿舍的网络覆盖&#xff0c;让即将踏上考场的高三学子们尽快用上网络&#xff1f; 近期&#xff0c;这个问题一直困扰着重庆电信客户经理周睿。原来&#xff0c;由于疫情原因&#xff0c;重庆市某中学…

WINDOWS安装Oracle11.2.0.4

(一)Oracle服务器端安装 1.运行Oracle11g服务器端安装程序setup.exe,弹出如下界面&#xff1a; 2.如上界面中&#xff0c;把默认打上的勾去掉&#xff0c;然后点击【下一步】&#xff0c;弹出如下界面&#xff1a; 3.如上界面中&#xff0c;选择跳过软件更新,然后点击【下一步…

指针进阶(三)再谈数组与串函数

&#x1f31e;欢迎来到C语言的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利完成…

【阶段二】Python数据分析数据可视化工具使用01篇:数据可视化工具介绍、数据可视化工具安装、折线图与柱形图

本篇的思维导图: 数据可视化工具介绍 Matplotlib是最著名的绘图库,主要用于二维绘图,当然也可以进行简单的三维绘图。它提供了一整套丰富的命令,让我们可以非常快捷地用Python可视化数据,而且允许输出达到出版质量的多种图像格式。 Seaborn是在matplo…

国内电容市场份额达七成,松下如何抢占高地?

01 电容市场发展 电容器是三大电子被动元器件之一&#xff0c;是电子线路中不可缺少的基础元件&#xff0c;约占全部电子元件用量的40%&#xff0c;产值的66%。中国电容器行业规模增速持续高于全球规模增速&#xff0c;中国市场的快速增长成为拉动全球电容器行业规模增长的主要…

【Python从入门到进阶】2、Python环境的安装

接上篇《1、初识Python》 上一篇我们对Python这门编程语言进行了一个基本的了解&#xff0c;本篇我们来学习如何下载安装Python编程环境&#xff0c;以及如何使用pip管理Python包。 本篇讲解的是Windows环境下安装Python编程环境的步骤。 一、Python安装包下载 想要使用Pyth…

vue框架、element-ui组件库、font awesome图表库

一、vue 创建一个新vue项目。 vue create ProjectName 然后cd到该目录下&#xff0c;npm run serve启动服务器&#xff0c;即可打开。 二、组件库 element-ui是饿了么的&#xff0c;ArcoDesign是字节的&#xff0c;有很多。 install见官方文档&#xff1a;组件 | Element 导入…

黑马学SpringAMQP

目录&#xff1a; &#xff08;1&#xff09;SpringAMQP的基本介绍 &#xff08;2&#xff09;SpringAMQP-入门案例的消息发送 &#xff08;3&#xff09; SpringAMQP-入门案例的消息接收 &#xff08;4&#xff09;SpringAMQP-WorkQueue模型 &#xff08;5&#xff09;Sp…

408数据结构考点总结

第一章 绪论 考点 1&#xff1a;时间复杂度与空间复杂度 时间复杂度 定义&#xff1a;将算法中基本运算的执行次数的数量级作为时间复杂度&#xff0c;记为O(n)O(n)O(n)。 计算原则 加法法则&#xff1a;T(n)T1(n)T2(n)O(f(n))O(g(n))O(max⁡(f(n),g(n)))T(n)T_{1}(n)T_{2…

安全—02day

XMLHttpRequest 对象 AJAX 通过原生的XMLHttpRequest对象发出 HTTP 请求&#xff0c;得到服务器返回的数据后&#xff0c;再进行处理。现在&#xff0c;服务器返回的都是 JSON 格式的数据&#xff0c; XMLHttpRequest本身是一个构造函数&#xff0c;可以使用new命令生成实例。…

T113_PRO-S3_GPS解析

今天主要是以市面上能买到的最新款的GPS作为解析的依据&#xff0c;市面上能买的GPS目前最新的串口打印的格式主要是如下&#xff1a; $GNGGA,085126.000,2311.77819,N,11323.44968,E,1,15,1.5,36.7,M,0.0,M,,*4C $GNGLL,2311.77819,N,11323.44968,E,085126.000,A,A*4B $GPGSA…

Java入门-0基础学Java-01Java环境变量配置

JDK的下载与安装jdk下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择与电脑系统匹配的版本进行下载&#xff08;Windows系统如果是32位下载Windows x86&#xff0c;64位下载Windows x64&#xff0c;苹果的下载M…

Go语言设计与实现 -- 调度器总体概述

Go语言调度器使用与CPU数量相等的线程来减少线程频繁切换带来的内存开销&#xff0c;同时在每一个线程上执行额外开销更低的Goroutine来降低操作系统和硬件的负载。 每一次线程上下文切换都需要消耗约1us的时间&#xff0c;而Go调度器对Goroutine的上下文的切换约为0.2us&#…

01_FreeRTOS基础知识

目录 裸机与RTOS介绍 裸机与RTOS特点 FreeRtos简介 任务调度简介 抢占式调度 时间片调度 协程式调度 任务状态 裸机与RTOS介绍 假设小明在打游戏,此时女盆友微信回复了信息。 裸机:在裸机上实现是等这游戏打完之后,在去回复女朋友的信息,假设游戏刚刚开始打完需要半小…

使用缓存保护MySQL

1 更新缓存最佳实践 Redis的执行器非常薄&#xff0c;所以Redis只支持有限API&#xff0c;几乎没聚合查询能力&#xff0c;也不支持SQL。存储引擎也简单&#xff0c;直接在内存中用最简单数据结构保存数据。 如Redis的LIST在存储引擎的内存中的数据结构就是双向链表。内存是易…

基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版

一、引用 Microsoft.ML.OnnxRuntime OpenCvSharp OpenCvSharp.Extensions二、人脸检测(Face Detection) using System; using System.Collections.Generic; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp;…

c++11 标准模板(STL)(std::deque)(十)

定义于头文件 <deque> std::deque 修改器 移除首元素 std::deque<T,Allocator>::pop_front void pop_front(); 移除容器首元素。若容器中无元素&#xff0c;则行为未定义。 指向被擦除元素的迭代器和引用被非法化。若元素是容器中的最后元素&#xff0c;则尾后…

2022 数字IC设计秋招复盘——数十家公司笔试题、面试实录

0 引言 秋招结束了。 “今年是前五年最差的一年&#xff0c;也将是后五年最好的一年”&#xff0c;虽然无法预知后面的就业情况&#xff0c;但就我今年自己的亲身经历与去年师兄师姐找工作的情况对比&#xff0c;感觉难度确实是增大了很多。我总共投递了80家左右的公司&#…