热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

方框_golangpromethusconsul服务发现

篇首语:本文由编程笔记#小编为大家整理,主要介绍了golangpromethusconsul服务发现相关的知识,希望对你有一定的参考价值。软件安装:

篇首语:本文由编程笔记#小编为大家整理,主要介绍了golang promethus consul 服务发现相关的知识,希望对你有一定的参考价值。



软件安装: 所需组件为: consul, promethus, grafana consul, grafana全部装在了本地, promethus运行在docker里面

docker pull consul
docker pull prom/prometheus
docker pull grafana/grafana

brew方式:

brew install grafana # grafana
brew tap hashicorp/tap # consul
brew install hashicorp/tap/consul # consul
brew install prometheus # prometheus 安装有点问题, 作者采用了docker方式

启动grafana:

brew services start grafana

访问:http://127.0.0.1:3000/

登录的时候默认用户名密码均为:admin

启动promethus:

docker run -d -p 8091:9090 --name=prometheus_server prom/prometheus # 主机9090被占用, 临时换成了8091

成功后访问http://127.0.0.1:8091/classic/graph

consul 前台启动:

consul agent -dev

这种方式只需要 ctrl + c 即可关闭 consul

正常启动:

consul agent -server -ui -bootstrap-expect=1 -data-dir=/Users/xxxxxx/consul_log -node=server-1 -client=0.0.0.0 -bind=192.168.3.241 -datacenter=dc1

启动成功后访问8500端口会出现如下界面:

自此所有组件启动完成(失败的情况请大家自行Google)


Promethus 配置pull方式

docker exec -it eb6c1878a8dc /bin/sh # eb6c1878a8dc 为promethus容器的id
vi /etc/prometheus/prometheus.yml

添加服务发现相关配置:

scrape_configs:
# - job_name: "prometheus"
# static_configs:
# - targets: ["192.168.3.241:22200","192.168.3.241:22201"]
- job_name: 'prometheus_monitor'
consul_sd_configs:
- server: '192.168.3.241:8500'
services: [prometheus_monitor]

static_configs中的targets为固定拉取部分,在容器化的今天,pod扩展后都需要手动修改很麻烦,采用服务发现的方式来发现节点才是理想的解决方式。services 是程序注册的服务名称,也支持正则的方式,具体请大家自行Google一下。

改完后的配置如下:

请确保server是可以访问到的地址,包括局域网或公网能否访问consul地址


客户端代码:

package main
import (
"flag"
"fmt"
"github.com/go-basic/uuid"
consulapi "github.com/hashicorp/consul/api"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net"
"net/http"
"time"
)
var (
commandPort int
instanceId string // 实例Id
opsProcessed prometheus.Counter
)
const (
consulAddress = "127.0.0.1:8500"
)
func RecordMetrics()
for
opsProcessed.Inc()
time.Sleep(5 * time.Second)


func GetLocalIP() string
addressList, err := net.InterfaceAddrs()
if err != nil
return ""

for _, address := range addressList
if ipNet, ok := address.(*net.IPNet); ok && !ipNet.IP.IsLoopback()
if ipNet.IP.To4() != nil
return ipNet.IP.String()



return ""

func main()
flag.IntVar(&commandPort, "command_port", 22200, "command port")
flag.Parse()
fmt.Println("command_port: ", commandPort)
RegisterService()
opsProcessed = promauto.NewCounter(prometheus.CounterOpts
Name: "myapp_processed_ops_total",
Help: "The total number of processed events",
ConstLabels: map[string]string
"instance_id": instanceId,
,
)
go RecordMetrics()
http.HandleFunc("/", Handler)
http.Handle("/metrics", promhttp.Handler())
err := http.ListenAndServe(fmt.Sprintf(":%d", commandPort), nil)
if err != nil
fmt.Println("error: ", err.Error())


func RegisterService()
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddress
client, err := consulapi.NewClient(config)
if err != nil
fmt.Println("consul client error : ", err)
return

// 创建注册到consul的服务到
id := uuid.New()
instanceId = id
registration := new(consulapi.AgentServiceRegistration)
registration.ID = id
registration.Name = "prometheus_monitor" //根据这个名称来找这个服务
registration.Port = commandPort
registration.Address = GetLocalIP()
// 增加consul健康检查回调函数
check := new(consulapi.AgentServiceCheck)
check.HTTP = fmt.Sprintf("http://%s:%d", registration.Address, registration.Port)
check.Timeout = "5s" //超时
check.Interval = "5s" //健康检查频率
check.DeregisterCriticalServiceAfter = "30s" // 故障检查失败30s后 consul自动将注册服务删除
registration.Check = check
// 注册服务到consul
err = client.Agent().ServiceRegister(registration)

func Handler(w http.ResponseWriter, r *http.Request)
w.Write([]byte("pong"))

启动程序:

go run main.go
go run main.go -command_port 22202

consul结果如下:

promethus结果如下:

grafana添加数据源:


选择add data source后选择promethus

填写promethus server的地址,底部有个save and test

当出现下面这种情况的时候说明数据源可用,不可用的话请检查consul, 检查promethus是否发现节点,以及服务端的 http://xxxxxxx:xxxx/metrics的地址是否能访问且有数据,正常情况如下:

选中dashboard, 添加一个空的panel

底部方框输入: myapp_processed_ops_total, 这是我们在代码里面添加的指标名称

最终显示结果如下

到此整个流程完成, 在代码里面动态注册服务到consul,promethus server通过consul拿到所有注册组件的地址,然后主动去拉取数据,最后grafana通过进行展示。


推荐阅读
  • Prometheus Grafana实现对Linux Kubernetes Nginx  的监控系统
    2019独角兽企业重金招聘Python工程师标准用Prometheus配合Grafana实现多用途的服务监控系统。一.Prometheus简介Prometheus是一个开源监 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • smartadmin mysql_Prometheus、Alertmanager、Grafana 监控 Linux 与 MySQL
    检查各个端口的放行部署各个模块与应用cdusrlocalPrometheus_composevimdocker-compose.ymlversion:3services:pro ... [详细]
  • 开发笔记:Prometheus监控系列最佳实践
    Prometheus是继kubernetes第二个从CNCF中毕业的项目,个人也是非常的喜欢这款通过数据指标发现和预测告警的开源监控平台,官方的话就不多说了,根据官网的 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • docker容器的数据管理一:数据卷实现数据的永久化,完全独立于容 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
author-avatar
Blackn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有