Go 实现 nginx log 读取 分析 写入InfluxDB 并用Grafana 显示

2024-06-12 03:48

本文主要是介绍Go 实现 nginx log 读取 分析 写入InfluxDB 并用Grafana 显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:慕课网https://www.imooc.com/learn/982

1. 系统结构

用Go实现文件读取,并且将log 分析并写入InfluxDB,最后用通过配置Grafana 显示

log file –>log process –> influxdb –> grafana

监控需求:某个协议下的某个请求在某个请求方法的QPS和响应时间和流量

2. Go 接收

  1. Go 并发执行
    • 将复杂的任务拆分,通过goroutine去并发的执行
    • 通过channel做数据通信
  2. Golang 中面向对象
    1. struct对象
    2. interface
    3. 封装,继承,多态

封装:

type Foo struct {baz string
}
func (f * Foo) echo() {fmt.Println(f.baz)
}

继承:

type Foo struct {baz string
}
type Bar strct {Foo
}

Code 实现:https://github.com/itsmikej/imooc_logprocess, 通过看视频教程,应该可以能够很好的理解code, 以及理解如何一步步实现模块封装。

3. InfluxDB

是一个开源的时序性的数据库,使用GO编写,被广泛用于存储系统的监控数据,IOT行业的实时数据等场景,有以下特性:

- 部署简单,无外部依赖
- 内置http支持,使用http读写
- 类sql的灵活查询(max,min,sum等)

概念:database: 数据库;measurement: 数据库的表,points: 表里的一行数据(tags: 有索引的属性,fields:各种记录的值,time: 时间戳)

写入数据:

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_usage,host=server01,region=us-west value=0.64 143405230000000'

读取数据:

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT\"value\"FROM\"cpu_usage\"WHERE "region\"='us-west'"

针对本log 系统:
tags: path, method, scheme, status
Fileds: UpstreamTime, Requestime,BytesSent
Time: Timelocal

安装:

  1. docker pull influxdb
  2. 创建DB, curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE imooc"
  3. 创建用户, curl "http://localhost:8086/query" --data-urlencode "q=CREATE USER imooc WITH PASSWORD 'imoocpass' WITH ALL PRIVILEGES"
  4. 启动container:
docker run -itd -p 8086:8086 -v $PWD:/var/lib/influxd influxdb

4. Grafana

Grafana 可以集成多种数据源, ES, Mysql 等 可以通过创建漂亮的GUI,实时的显示数据。只需要配置下Datastore,以及DashBoad
安装

docker run -d --name=grafana -p 3000:3000 grafana/grafana

Add datastore: 添加 influxdb 的地址,数据库等信息。

这篇关于Go 实现 nginx log 读取 分析 写入InfluxDB 并用Grafana 显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult