当前位置: 首页 > news >正文

使用ELK收集解析nginx日志和kibana可视化仪表盘

文章目录

  • ELK生产环境配置
    • filebeat 配置
    • logstash 配置
  • kibana仪表盘配置
  • 配置nginx转发ES和kibana
  • ELK设置账号和密码

ELK生产环境配置

ELK收集nginx日志有多种方案,一般比较常见的做法是在生产环境服务器搭建filebeat 收集nginx的文件日志并写入到队列(kafka/redis),然后在另一台机器上消费队列中的日志数据并流转到logstash中进行解析处理,然后再输出到elasticsearch中,再由kibana展示到页面上。

虽然logstash也能直接收集日志,但因为filebeat比logstash更轻量级,不会耗费太多系统资源,因此适合在生产环境机器上部署filebeat

  • 生产环境机器:filebeat ---> redis
  • 日志处理机器:redis ---> logstash ---> elasticsearch ---> kibana

filebeat 配置

# vim filebeat-5.6.9/filebeat.ymlfilebeat.inputs: #用于定义数据原型
- type: log #指定数据的输入类型,这里是log,即日志,是默认值,还可以指定为stdin,即标准输入enabled: true #启用手工配置filebeat,而不是采用模块方式配置filebeatpaths: #用于指定要监控的日志文件,可以指定一个完整路径的文件,也可以是一个模糊匹配格式,如 nginx_*.log- /usr/local/nginx/logs/access.log# tags: ["access"]fields:app: www #表示www项目type: nginx-access #通过type区分哪种日志,这里表示是nginx的access日志fields_under_root: true- type: logpaths:- /usr/local/nginx/logs/error.log# tags: ["error"]fields:app: wap #表示wap项目type: nginx-error #通过type区分哪种日志,这里表示是nginx的error日志fields_under_root: truename: "172.16.213.157" #设置filebeat收集的日志中对应主机的名字,如果配置为空,则使用该服务器的主机名。这里设置为IP,便于区分多台主机的日志信息。output.redis: #输出到redis的配置enabled: true #表明这个模块是否启用hosts: ["192.168.0.1"]port: 6379password: "123456"key: "filebeat"db: 5datatype: listoutput.kafka: #输出到kafka的配置enabled: false #表明这个模块是否启用hosts: ["172.16.213.51:9092", "172.16.213.75:9092", "172.16.213.109:9092"] #指定输出数据到kafka集群上,地址为kafka集群IP加端口号。version: "0.10"topic: '%{[fields][log_topic]}' #指定要发送数据给kafka集群的哪个topic,若指定的topic不存在,则会自动创建此topic。partition.round_robin:reachable_only: trueworker: 2required_acks: 1compression: gzipmax_message_bytes: 10000000
logging.level: debug #定义filebeat的日志输出级别,有critical、error、warning、info、debug五种级别可选,在调试的时候可选择debug模式。

启动filebeat并且不输出内容
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

查看redis:

redis-cli -h 192.168.0.1 -p 6379 -a 123456192.168.0.1:6379[5]> llen filebeat
(integer) 101192.168.0.1:6379[5]> lrange filebeat 0 0
1) "{\"@timestamp\":\"2023-08-30T06:21:56.896Z\",\"beat\":{\"hostname\":\"yourhost\",\"name\":\"yourhost\",\"version\":\"5.6.9\"},\"input_type\":\"log\",\"message\":\"{\\\"@timestamp\\\": \\\"2023-08-30T14:21:55+08:00\\\", \\\"remote_addr\\\": \\\"222.128.101.33\\\", \\\"remote_user\\\": \\\"-\\\", \\\"body_bytes_sent\\\": \\\"8637\\\", \\\"request_time\\\": \\\"2.554\\\", \\\"status\\\": \\\"200\\\", \\\"request_uri\\\": \\\"/user/info\\\", \\\"request_method\\\": \\\"POST\\\", \\\"http_referrer\\\": \\\"https://www.test.com/\\\", \\\"http_x_forwarded_for\\\": \\\"-\\\"}\",\"offset\":35407874,\"source\":\"/usr/local/nginx/logs/access.log\",\"type\":\"log\"}"

logstash 配置

下面是一个logstash从redis中读取日志数据并解析输出到ES的完整配置:

# vim logstash-7.17.12/config/logstash-from-redis-to-es.confinput {redis {host => "192.168.0.1"port => 6379password => "123456"db => "5"data_type => "list"key => "filebeat"}
}filter {if [app] == "www" { #如果是www项目(下面还可以再写else if ... ),对应上面filebeat配置信息的fields.appif [type] == "nginx-access" { #如果是nginx的access日志,对应上面filebeat配置信息的fields.typejson { #解析json模块source => "message" #将message中的每个字段解析到一级节点remove_field => ["message","beat"] #经过上面source解析后,移除原本的message字段,避免日志内容冗余;beat字段也没啥用,所以也移除。}geoip { #根据ip地址解析 国家和城市 信息source => "remote_addr" #根据nginx日志的remote_addr字段解析target => "geoip" #解析后的结果放到这个字段中database => "/home/es/soft/GeoLite2-City.mmdb" #解析位置信息的数据库文件所在路径add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"] #添加字段:经纬度信息add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]}mutate { #修改某个字段的数据,比如类型转换convert => ["[geoip][coordinates]", "float"]  }}}
}output {elasticsearch {hosts  => ["http://192.168.0.212:9200","http://192.168.0.213:9200","http://192.168.0.214:9200"]index  => "logstash-%{type}-%{+YYYY.MM.dd}" #这里的 %{type} 是 filebeat配置信息的fields.type 对应的值user => "elastic" #ES账号password => "123456" #ES密码}
}

GeoLite2-City.mmdb 下载地址:https://download.csdn.net/download/rxbook/88274725

启动logstash:nohup ./bin/logstash -f ./config/logstash-from-redis-to-es.conf >/dev/null 2>&1 &

查看kibana收集到的数据:
在这里插入图片描述
在这里插入图片描述

kibana仪表盘配置

kibana dashboard 是一个统计数据展示面板,可以通过不同的维度进行统计和展示。
我这里用kibana7.17.12版本演示,不同版本的kibana界面可能不一样。进入kibana --> Visualize Library --> Create new visualization --> Lens

按时间维度统计请求数量:
在这里插入图片描述

按HTTP code统计请求数量:
在这里插入图片描述
统计所有请求总数:
在这里插入图片描述

统计访问次数最多的url:
在这里插入图片描述
最终效果:
在这里插入图片描述

配置nginx转发ES和kibana

如果需要使用80端口访问ES或kibana页面,可以在nginx中配置代理转发9200或5601端口,配置如下:

server {listen  80;server_name     es.xxxx.com;location / {proxy_pass      http://127.0.0.1:9200;}
}server {listen  80;server_name     kibana.xxxx.com;location / {proxy_pass      http://127.0.0.1:5601;}
}

上面配置后就可以直接通过域名来访问kibana的页面(需要添加hosts)。

ELK设置账号和密码

修改ES的配置文件vi config/elasticsearch.yml 添加如下内容

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

保存后重启ES,然后执行:./bin/elasticsearch-setup-passwords interactive,需要设置以下六种账户的密码elastic、apm_system、kibana、logstash_system、beats_system、remote_monitoring_user
输入y开始设置,六种密码设置完成后,需要再次重启ES。
在这里插入图片描述
然后打开ES的页面,账号:elastic,密码就是你刚才设置的密码。
在这里插入图片描述
设置kibana的密码,vi config/kibana.yml,添加:

elasticsearch.username: "elastic"
elasticsearch.password: "你在es中设置的密码"

然后重新启动kibana,再次访问,需要输入账号和密码。
在这里插入图片描述

相关文章:

使用ELK收集解析nginx日志和kibana可视化仪表盘

文章目录 ELK生产环境配置filebeat 配置logstash 配置 kibana仪表盘配置配置nginx转发ES和kibanaELK设置账号和密码 ELK生产环境配置 ELK收集nginx日志有多种方案,一般比较常见的做法是在生产环境服务器搭建filebeat 收集nginx的文件日志并写入到队列(k…...

【Sentinel】ProcessorSlotChain处理器插槽链与Node

文章目录 1、Sentinel的基本概念2、ProcessorSlotChain3、Node 1、Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能,本质要做的就是两件事情: 统计数据:统计某个资源的访问数据(QPS、RT等信息)规则判断…...

数据库管理系统(DBMS)的事务四大特性(ACID)以及事务的四种隔离级别

一、什么是ACID? ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability) 的缩写,是在可靠数据库管理系统(DBMS&…...

leetcode 234. 回文链表

2023.9.5 本题先将链表的节点值移到数组中,再用双指针去判断该数组是否为回文的即可。 代码如下: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* …...

Scala集合继承体系图

Scala集合简介 1) Scala 的集合有三大类:序列 Seq、集Set、映射 Map,所有的集合都扩展自 Iterable特质。 2) 对于几乎所有的集合类,Scala 都同时提供了可变和不可变的版本,分别位于以下两个包 不可变集合…...

《Go 语言第一课》课程学习笔记(十五)

并发 Go 的并发方案:goroutine 并行(parallelism),指的就是在同一时刻,有两个或两个以上的任务(这里指进程)的代码在处理器上执行。 并发不是并行,并发关乎结构,并行关…...

练习 Qt 实时显示鼠标坐标位置

Qt 入门实战教程(目录) 前驱课程 本文是文章 Qt鼠标点击事件处理:显示鼠标点击位置(完整示例) 的一个作业(下文称之为“前驱课程”)。 前驱课程中,我们完整的展示了如何在QtCreat…...

Leetcode130. 被围绕的区域

Every day a Leetcode 题目来源:130. 被围绕的区域 本题给定的矩阵中有三种元素: 字母 X;被字母 X 包围的字母 O;没有被字母 X 包围的字母 O。 本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 …...

6.xpath的基本使用

xpath是python做数据解析的库 目录 1 安装 2 解析本地的html文件 2.1 只有一个标签的情况 2.2 有多个标签的情况 3 解析网上的页面 4 xpath表达式 4.1 绝对路径 4.2 两个斜杠表示中间隔了0级或多级 4.3 通过属性查找 4.4 通过索引查找 4.5 获取文本内容…...

uniapp组件库总结笔记

uView-ui uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 优点:整体样式风格不错 缺点:不支持vue3(可以使用社区维护的uview-plus uview-plus 3.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架) uni-u…...

day-42 代码随想录算法训练营 动态规划 part 04

416.分割等和子集 分析:需要总和能分成两半,并且有子集能装满一半 思路: 1.dp存储:容量为j时装入的最大数值和dp[j]2.dp[j]max(dp[j],dp[j-nums[i]]nums[i]) 3.全部初始化为04.遍历顺序:外层遍历元素,内…...

Swift 周报 第三十六期

文章目录 前言新闻和社区消息称苹果公司和印度财政部官员磋商,扩大在印度的制造产能iPhone 15 Pro 机型新增泰坦灰iPhone 15 全系配 USB-C 苹果拒绝接口和安卓互通 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十…...

手写Mybatis:第19章-二级缓存

文章目录 一、目标:二级缓存二、设计:二级缓存三、实现:二级缓存3.1 工程结构3.2 二级缓存类图3.3 二级缓存队列3.3.1 FIFI缓存策略3.3.2 事务缓存3.3.3 事务管理3.3.4 修改一级缓存 3.4 缓存执行器3.4.1 执行器接口3.4.2 执行器抽象基类3.4.…...

Alibaba Canal 使用记录

项目中使用 canal 来同步数据到 Elasticsearch, 遇到很多问题,做一下记录: 版本问题: 1. 解析binlog出错 ,表现为 limit excceed:xx 目前使用 mariadb 10.9.7/10.10.6 canal 1.1.6 hotfix ,在这个版本组…...

GIT实战篇,教你如何使用GIT可视化工具

系列文章目录 手把手教你安装Git,萌新迈向专业的必备一步 GIT命令只会抄却不理解?看完原理才能事半功倍! 快速上手GIT命令,现学也能登堂入室 GIT实战篇,教你如何使用GIT可视化工具 系列文章目录一、GIT有哪些常用工具…...

lv3 嵌入式开发-4 linux shell命令(文件搜索、文件处理、压缩)

目录 1 查看文件相关命令 1.1 常用命令 1.2 硬链接和软链接 2 文件搜索相关命令 2.1 查找文件命令 2.2 查找文件内容命令 2.3 其他相关命令 3 文件处理相关命令 3.1 cut 3.2 sed 过滤 3.3 awk 匹配 4 解压缩相关命令 4.1 解压缩文件的意义 4.2 解压缩相关命令 1 …...

SpringBoot2.0集成WebSocket,多客户端

适用于单客户端,一个账号登陆一个客户端,登陆多个客户端会报错 The remote endpoint was in state [TEXT_FULL_WRITING] 这是因为此时的session是不同的,只能锁住一个session,解决此问题的方法把全局静态对象锁住,因…...

华为OD机试 - 等和子数组最小和 - 深度优先搜索(Java 2022 Q4 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》…...

浏览器会因为什么样的脚本而崩溃

浏览器可能因为以下几种情况而崩溃: 无限循环:如果JavaScript脚本包含一个无限循环,浏览器将无法停止脚本的执行,导致浏览器不响应甚至崩溃。例如,以下代码会导致无限循环: while (true) {// 无限循环 } 内…...

生成与调用C++动态链接库(so文件)

文章目录 前言生成C动态链接库步骤1:编写C源码步骤2:生成共享库步骤3:验证生成的SO文件 调用C动态链接库步骤1:修改原来makefile步骤2:编译调用程序步骤3:运行调用程序 总结 前言 动态链接库是代码重用和模…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...