首页 > 其他分享 >Golang语言之Prometheus的日志模块使用案例

Golang语言之Prometheus的日志模块使用案例

时间:2024-08-10 08:56:46浏览次数:9  
标签:github log level prometheus server Golang Prometheus 日志 com

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

目录

一.源代码编写

package main

import (
	"fmt"
	"os"
	"path/filepath"
	"time"

	"github.com/alecthomas/kingpin/v2"
	"github.com/go-kit/log"
	"github.com/go-kit/log/level"

	"github.com/prometheus/common/promlog"
	promlogflag "github.com/prometheus/common/promlog/flag"
	"github.com/prometheus/common/version"
)

var (
	videos = "https://space.bilibili.com/600805398/channel/series"
	docs   = "https://www.cnblogs.com/yinzhengjie"
	// 命令行解析
	app = kingpin.New(filepath.Base(os.Args[0]), fmt.Sprintf("yinzhengjie-devops'server Program, docs: %s, videos: %s", docs, videos))
	// 指定配置文件
	configFile = app.Flag("config.file", "configuration file path").Short('c').Default("yinzhengjie-devops-server.yaml").String()
)

// Logger用于设置prometheus的Logger,
func Logger(config *promlog.Config) log.Logger {
	var (
		l  log.Logger
		le level.Option
	)

	// 设置日志的输出格式
	if config.Format.String() == "logfmt" {
		l = log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
	} else {
		l = log.NewJSONLogger(log.NewSyncWriter(os.Stderr))
	}

	// 设置日志级别
	switch config.Level.String() {
	case "debug":
		le = level.AllowDebug()
	case "info":
		le = level.AllowInfo()
	case "warn":
		le = level.AllowWarn()
	case "error":
		le = level.AllowError()
	}

	l = level.NewFilter(l, le)

	// CST可视为美国、澳大利亚、古巴或中国的标准时间,CST可以为如下4个不同的时区的缩写:
	// 		美国中部时间:Central Standard Time (USA) UT-6:00
	// 		澳大利亚中部时间:Central Standard Time (Australia) UT+9:30
	// 		中国标准时间:China Standard Time UT+8:00
	// 		古巴标准时间:Cuba Standard Time UT-4:00
	//
	// 重新设置一下时区,否则是UTC时间,建议设置CST时区,我们以北京的东八区时间为准。
	l = log.With(l, "cts", log.TimestampFormat(
		func() time.Time { return time.Now().Local() },
		"2006-01-02T15:04:05.000Z08:00",
	), "caller", log.DefaultCaller)
	return l
}

func main() {
	// 版本信息
	// app.Version("v1.0")
	app.Version(version.Print("yinzhengjie-devops-server"))

	// 帮助信息
	app.HelpFlag.Short('h')
	promlogConfig := promlog.Config{}

	promlogflag.AddFlags(app, &promlogConfig)

	// 强制解析
	kingpin.MustParse(app.Parse(os.Args[1:]))

	fmt.Printf("configFile: %s\n", *configFile)

	// 设置prometheus的logger
	var logger log.Logger = Logger(&promlogConfig)

	// 输出日志事件时需要指定日志级别,此处我指定的日志级别为"info"
	level.Info(logger).Log(
		// 注意,写入的数据成对出现,比如下面的案例我就写了5对测试数据。
		"Name", "尹正杰",
		"Hobby", "Golang K8S Docker",
		"blog", "https://www.cnblogs.com/yinzhengjie",
		"cfg", *configFile,
		"age", 18,
	)
}

二.编译

go build -o server -ldflags "-X 'github.com/prometheus/common/[email protected]' -X 'github.com/prometheus/common/version.BuildDate=`date`' -X 'github.com/prometheus/common/version.Version=v0.2'" src/models/server/server.go

三.测试

	1.查看服务的版本信息
./server --version

	2.指定程序的配置文件
./server -c /etc/nginx/conf.d/games.conf

	3.查看程序的帮助信息
./server -h

	4.不指定任何参数
./server

	5.指定日志输出格式
./server --log.format=json

	6.同时指定多个参数
./server --log.format=json -c /etc/nginx/nginx.conf

标签:github,log,level,prometheus,server,Golang,Prometheus,日志,com
From: https://www.cnblogs.com/yinzhengjie/p/18351921

相关文章

  • 如何从一堆文件中找到指定的日志段?
    背景这个问题主要考察了Linux命令的使用,find命令和grep命令,在linux系统中,这两个命令用的比较广泛,工作中常常可以用来查找到指定的日志内容。今天我们就来学一下两个命令,然后回答下这个问题吧。命令介绍1、find命令find常用来在Linux系统中查找文件或者目录,查找到的文件名会......
  • SpringBoot日志的使用
    背景:在生产环境中,排程问题都是通过日志,所以日志很重要。日志有三个部分组成LoggerAppenderLayout一般日志都会有对应的配置文件,log4j2.xml或者是logback-spring.xml,日志的输出格式在Pattern标签中1、确认日志框架:确认日志框架是log4j2、logback还是其他的......
  • Jenkins 的 Shell 命令中执行一个 JAR 包时,日志没有显示,如何禁用输出缓冲
    在Jenkins的Shell命令中执行JAR包时,如果日志没有显示且你想禁用输出缓冲,可以尝试使用以下方法之一来禁用输出缓冲:1.使用 stdbuf 命令:stdbuf 是用于修改标准I/O缓冲机制的命令,可以用来调整输出的缓冲方式。你可以尝试使用 stdbuf 命令来禁用输出缓冲,例如:stdbuf-o......
  • Springboot+logback+druid +密码加密 实现业务日志入库
    springboot配置spring:datasource:type:com.alibaba.druid.pool.DruidDataSourcedruid:#主库数据源master:driverClassName:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://xxx:3306/dbName?useUnicode=true&characterEncoding=u......
  • jenkins的shell command中如何让python 实时显示执行日志
    在使用Jenkins的shellcommand里面执行python脚本时,我们希望在构建shell脚本时可以实时输出日志,但是在构建python脚本时,是等到python执行完成以后,才显示结果,这个对于我们判断脚本执行状态非常不友好。而之所以会出现这种情况,是因为python默认是有缓存的,所以我们需要禁用输入......
  • 在两个大文件中找出相同的记录,用golang如何写?
    在两个大文件中找出相同的记录,可以使用Golang实现高效的算法。这里主要涉及以下几个步骤:读取文件:逐行读取两个大文件。使用数据结构存储记录:可以使用Go的map数据结构来存储其中一个文件的记录,之后遍历另一个文件,检查其记录是否在map中,若在则记录下该相同记录。输出结果:将......
  • graylog长日志丢日志的问题
    graylog长日志丢日志的问题环境:C#.NET使用UDP发送给graylog。当日志内容(full_message)超过 21790个汉字时,就报错:一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。 21780个汉字正常。 可能尝试的......
  • Prometheus+Grafana-1-基础介绍及安装
    一、体系架构(了解)数据采集流程 说白了就是采集数据->计算是否超过阈值->发起警告Prometheus查询界面如下1.报警简介展现形式:短信,邮件,电话,通讯软件。阈值(TriggerValue),如达到阈值可以触发预警。Pagerduty拥有短信、电话、邮件所有报警机制,还有必要的运维值班管......
  • DzzOffice系统与插件更新日志
    2024/07/23PDFTron1.支持将编辑后的PDF文件保存到Dzz中:实现了编辑与存储的无缝对接,简化了文件处理流程,减少了用户的操作步骤,提高了工作效率。2.对接Dzz的文件权限管理:用户在保存PDF文件时,可以自动应用DzzOffice中设置的文件权限规则。这意味着文件的查看、编辑、下载等权......
  • Golang 中 defer panic recover 简单使用
    Golangdefer、panic、recoverdeferdefer语句用于延迟执行一个函数调用,直到包含该defer语句的函数执行完毕。defer语句通常用于释放资源、关闭文件、解锁互斥锁等操作。defer语句的执行顺序是后进先出,即最后被defer的语句最先执行。例如:funcmain(){deferfmt.Pr......