ElK 8 收集 Nginx 日志

embedded/2024/9/19 19:22:09/ 标签: elk, nginx

1. 说明

elk 版本:8.15.0

nginx_4">2. 启个 nginx

nginx 可以直接使用。我这里是在之前环境下 docker-compose.yml 中启动了个 nginx

nginx:restart: alwaysimage: nginx:1.26.1ports:- "80:80"- "443:443"volumes:#- ./nginx/html:/usr/share/nginx/html- ./nginx/logs:/var/log/nginx#- ./nginx/certs:/etc/nginx/certs- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf- ./nginx/conf/conf.d:/etc/nginx/conf.d

刚开始如果没有 nginx 配置,可以先不映射配置目录和文件,先启动,然后 docker cp 把配置和目录拷贝出来,再挂载进去。

配置 nginx/conf/conf.d/default.conf

#
upstream kibana_servers {server kibana:5601 weight=1 max_fails=3 fail_timeout=30s;
}server{listen 80;server_name localhost;# root /usr/local/nginx/html ;# rewrite ^(.*) https://$server_name$1 permanent;location / {proxy_pass http://kibana_servers/;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Host $host:$server_port;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Real-IP $remote_addr;proxy_connect_timeout  30s;proxy_read_timeout     90s;proxy_send_timeout     90s;client_max_body_size   50m;client_body_buffer_size 16k;  # 默认是 8k 或 16k,可以根据需要调整}
}

3. filebeat 接入到 es

根据指引 filebeat 直接接入到 es。
filebeat接入指引

filebeat 安装参考 《Docker compose 安装 ELK》中 “6. 安装 filebeat”。

filebeat 的目录下,设置 nginx 日志路径 modules.d/nginx.yml

- module: nginx# Access logsaccess:enabled: true# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.var.paths: ["/data/docker/elk/nginx/logs/access.log*"]# Error logserror:enabled: true# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.var.paths: ["/data/docker/elk/nginx/logs/error.log*"]

主配置 filebeat.yml

filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.ymloutput.elasticsearch:hosts: ["https://10.1.205.165:9200"]username: "filebeat_writer"password: "YOUR_PASSWORD"ssl:enabled: true# fingerprint=$(openssl x509 -fingerprint -sha256 -noout -in certs/ca/ca.crt | awk -F"=" '{print $2}' | sed 's/://g')ca_trusted_fingerprint: "33CB5A3B3ECCA59FDF7333D9XXXXXXXXFD34D5386FF9205AB8E1"# certs/ca 目录从 es 中拷过来certificate_authorities: ["certs/ca/ca.crt"]# output.logstash:
#   hosts: ["10.1.205.165:5044", "10.1.205.166:5044"]setup.kibana:host: "10.1.205.165:5601"logging.level: warning

Dev Tools 创建角色:

PUT /_security/role/filebeat_writer_role
{"cluster": ["monitor"],"indices": [{"names": ["filebeat*"],"privileges": ["create_doc","create","delete","index","write","all","auto_configure","manage"],"allow_restricted_indices": false}],"applications": [],"run_as": [],"metadata": {},"transient_metadata": {"enabled": true}
}

Dev Tools 创建用户:

POST /_security/user/filebeat_writer
{"password" : "YOUR_PASSWORD","roles" : [ "filebeat_writer_role" ],"full_name" : "Filebeat Writer","email" : "filebeat_writer@example.com","metadata" : {}
}

启用模块:

./filebeat modules enable nginx
./filebeat modules enable all-filesets#
./filebeat setup
./filebeat -e

成功后,在 kibana 的 nginx log dashboard 中可以看到数据
成功

4. filebeat 接入 logstash

主配置 filebeat.yml

filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.yml# output.elasticsearch:
#   hosts: ["https://10.1.205.165:9200"]
#   username: "filebeat_internal"
#   password: "YOUR_PASSWORD"
#   ssl:
#     enabled: true
#     # fingerprint=$(openssl x509 -fingerprint -sha256 -noout -in certs/ca/ca.crt | awk -F"=" '{print $2}' | sed 's/://g')
#     ca_trusted_fingerprint: "33CB5A3B3ECCA59FDF7333D9XXXXXXXXFD34D5386FF9205AB8E1"
#     # certs/ca 目录从 es 中拷过来
#     certificate_authorities: ["certs/ca/ca.crt"]output.logstash:hosts: ["10.1.205.165:5044", "10.1.205.166:5044"]setup.kibana:host: "10.1.205.165:5601"logging.level: warning

有问题的配置我就不贴了,最终配置在下面,注释有说明解决问题的关键。
启动 filebeat 后,在 kibana Dev Tools 中查询:

GET filebeat-*/_search
{"size": 1,"sort": [{}]
}

结果发现 ingest pipeline 处理异常,经过一段时间排查,找到了 相同问题链接
问题
然后下面是最终的可用 Logstash Pipeline 设置 logstash/pipeline/filebeat.conf

#
input {beats {port => 5044}
}filter {if [@metadata][pipeline] {# 这里解决上面 `[event][original]` 已存在问题ruby {code => "event.remove('[event][original]')"}} else if [log_type] == "k8s" {# 将嵌套字段提升为顶层字段mutate {rename => {"[kubernetes][namespace]" => "kubernetes_namespace""[kubernetes][node][name]" => "kubernetes_node_name""[kubernetes][pod][ip]" => "kubernetes_pod_ip""[kubernetes][pod][name]" => "kubernetes_pod_name""[container][runtime]" => "container_runtime"}}# 使用 prune 过滤器保留所需字段prune {whitelist_names => ["@timestamp", "log_type", "container_runtime", "kubernetes_namespace", "kubernetes_node_name", "kubernetes_pod_ip", "kubernetes_pod_name", "message"]}}
}output {if [@metadata][pipeline] {elasticsearch {hosts => ["https://es01:9200", "https://es02:9200", "https://es03:9200"]user => "logstash_writer"password => "logstash_password"ssl_enabled => truessl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt"action => "create"pipeline => "%{[@metadata][pipeline]}"index => "%{[@metadata][beat]}-%{[@metadata][version]}"manage_template => false}} else if [log_type] == "k8s" {elasticsearch {hosts => ["https://es01:9200", "https://es02:9200", "https://es03:9200"]index => "k8s-%{+YYYY.MM.dd}"user => "logstash_writer"password => "logstash_password"ssl_enabled => truessl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt"}} else {# 默认索引elasticsearch {hosts => ["https://es01:9200", "https://es02:9200", "https://es03:9200"]index => "logstash-%{+YYYY.MM.dd}"user => "logstash_writer"password => "logstash_password"ssl_enabled => truessl_certificate_authorities => "/usr/share/logstash/certs/ca/ca.crt"action => "create"manage_template => false}}
}

logstash 角色和用户权限同上面 filebeat 角色和用户。

5. 总结

Filebeat 收集 nginx、mysql 等日志,没有特别需求,最好直接接入 ES 中,少了一层 logstash 其实性能更好,问题也相对较少,官方文档推荐的。

参考资料:
[1] https://www.elastic.co/guide/en/logstash/8.15/use-ingest-pipelines.html
[2] https://www.elastic.co/guide/en/elasticsearch/reference/8.15/ingest.html
[3] https://www.elastic.co/guide/en/beats/filebeat/8.15/filebeat-installation-configuration.html
[4] https://discuss.elastic.co/t/aws-ingest-pipeline-error-in-processor-rename-message-to-event-original/341472/8
[5] https://www.elastic.co/guide/en/ecs-logging/overview/master/intro.html


http://www.ppmy.cn/embedded/113040.html

相关文章

Nuxt Kit 中的页面和路由管理

title: Nuxt Kit 中的页面和路由管理 date: 2024/9/17 updated: 2024/9/17 author: cmdragon excerpt: 摘要:本文介绍了Nuxt Kit中页面和路由管理的高级功能,包括extendPages自定义页面路由、extendRouteRules定义复杂路由逻辑及addRouteMiddleware注册路由中间件。通过这…

[苍穹外卖]-12Apache POI入门与实战

工作台 需求分析: 工作台是系统运营的数据看板, 并提供快捷操作入口, 可以有效提高商家的工作效率 营业额: 已完成订单的总金额有效订单: 已经完成订单的数量订单完成率: 有效订单数/总订单数*100%平均客单价: 营业额/有效订单数新增用户: 新增的用户数量 接口设计: 一个接口返…

计算机毕业设计 二手闲置交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

fiddler抓包02_安装

① 访问官网:https://www.telerik.com/fiddler ② 点击“try for free”,选择经典版。 ③ 选择任意用途,输入邮箱,选择地区china,确定下载。 ④ 双击安装包进行安装。 安装后为英文界面:

nginx 文件尺寸过大解决方案

http { # 其他配置... client_max_body_size 1M; # 这是默认值,也可以在 server 块中覆盖 # 其他配置... } server { listen 80; server_name shop.yanmishu.cn; # 如果有这个配置,则会覆盖 http 块中的设置 …

借助大模型将文档转换为视频

利用传统手段将文档内容转换为视频,比如根据文档内容录制一个视频,不仅需要投入大量的时间和精力,而且往往需要具备专业的视频编辑技能。使用大模型技术可以更加有效且智能化地解决上述问题。本实践方案旨在依托大语言模型(Large …

2024网络安全人才实战能力白皮书安全测试评估篇

9月10日,国内首个聚焦“安全测试评估”的白皮书——《网络安全人才实战能力白皮书-安全测试评估篇》(以下简称“白皮书”)在国家网络安全宣传周正式发布。 作为《网络安全人才实战能力白皮书》的第三篇章,本次白皮书聚焦“安全测…

基于react native的锚点

基于react native的锚点 效果示例图示例代码 效果示例图 示例代码 /* eslint-disable react-native/no-inline-styles */ import React, { useEffect, useRef, useState } from react; import {Image,ImageBackground,ScrollView,StyleSheet,Text,TouchableOpacity,View, } fr…

若依nday复现

前言 声明:此文章仅做学习,未经授权严禁转载。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关 本文章只做简单汇总,在此感谢其他师傅的文章和分享 前置准备 环境搭建 下载:https:/…

微服务之间远程调用实现思路

项目使用的Spring Cloud Alibaba框架,微服务之间远程调用使用OpenFeign,具体实现步骤如下: (1)在api工程定义OpenFeign接口,使用FeignClient注解进行定义。 (2)服务提供方定义Open…

【FFmpeg应用场景概述】

Question FFmpeg应用场景概述 Answer FFmpeg是一个开源的音视频处理工具,广泛应用于多种场景。以下是一些常见的应用场景概述: 视频转码:FFmpeg支持多种音视频格式的转换,可以将视频文件从一种格式转换为另一种格式&#xff0c…

Vue基础明晰

Vue基础明晰 ​ Vue长期处于会写而不去理解,此文简单梳理一下。 ​ 一个Vue页面基本分为两部分:1.搜索、按钮等为主的表单域 2.展示数据库信息的表格域 Form表单: 一个Form表单其下为多个form-item,各搜索输入框都包裹在form-i…

HarmonyOS开发之使用Picker(从相册选择图片),并且通过Swiper组件实现图片预览

一:效果图: 二:添加依赖 import picker from ohos.file.picker; 三:创建showDialog showDialog() {AlertDialog.show({message: 从相册选择,alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: -12 },primaryButton: {val…

pip安装包、卸载包、更新包命令

pip安装包、卸载包、更新包命令 pip命令具体说明备注pip list列出当前环境下已安装的包pip install [安装包名]安装指定包pip install SomePackage1.0.4安装指定版本pip uninstall [卸载包名]卸载指定包pip install --upgrade [要升级的包名称]升级指定包pip install -U [要升…

C++笔记---继承(下)

1. 无法被继承的类 要实现无法被继承的类有两种方式: C98及其之前:将父类的构造函数设置为private成员。 C11及其之后:使用final关键字修饰父类。 将构造函数设置为private是因为:子类的构成必须调用父类的构造函数,但…

C++学习笔记(26)

七 、显示字符串中的字符 从界面上输入一个字符串(C 风格),把字符串中的每个字符显示出来,如果输入的是"abc",要求: 1)正序显示:a b c 2)逆序显示:…

NC 矩阵最长递增路径

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个 n 行…

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";

车辆重识别(关于卷积神经网络一些资料)2024/9/11

关于卷积神经网络的介绍 一,全连接神经网络 1,全连接神经网络的整体结构 X代表左边输入的数据(向量或者矩阵等等),Y代表模型对数据处理之后的结果,中间的节点都可以算作为隐藏层。 2,全连接神经…

【Linux】进程调度与切换

【Linux】进程调度与切换 1. 基本概念2. 进程切换3. 进程调度3.1运行队列实现优先级设计3.2 处理效率问题3.3 活动队列与过期队列3.4 如何解决饥饿问题3.5 active指针和expired指针 1. 基本概念 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个&am…