2024年Go最全Golang监控(Telegraf + InfluxDB + Grafana)(1),让人茅塞顿开

11 篇文章 0 订阅
10 篇文章 0 订阅

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[[inputs.statsd]]
protocol = “udp”
service_address = “:8125”
复制代码


然后,配置InfluxDB的信息:



[[outputs.influxdb]]
urls = [“http://127.0.0.1:8086”]
database = “golang123”
username = “influx”
password = “123456”
复制代码


启动telegraf服务:



systemctl start telegraf
netstat -naup|grep 8125 #确认端口已监听
复制代码


### 第三步 安装Grafana


访问[grafana.com/grafana/dow…]( ) ,查看各系统的安装方法


如果是centos的话,输入以下两行命令



wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_64.rpm
sudo yum localinstall grafana-5.0.4-1.x86_64.rpm
复制代码


启动grafana服务



$ systemctl daemon-reload
$ systemctl start grafana-server
$ systemctl status grafana-server
复制代码


设置开机启动



systemctl enable grafana-server.service
复制代码


通过浏览器访问 [http://127.0.0.1:3000]( ) 来登陆grafana的web界面,输入默认的用户名 admin,密码 admin。 点击按钮 Add data source来添加数据源, 如下图所示 











| 配置项 | 说明 |
| --- | --- |
| Name | 数据源名称 |
| Type | 数据源类型, 这里我们使用的是InfluxDB |
| URL | 填写InfluxDB对应的API地址即可,如果Grafana跟InfluxDB不在同一台机器,将localhost换成IP即可 |
| Access | API访问方式,一共有Direct和Proxy两个选项。建议选择ProxyDirect: 浏览器直连数据源API,然后由Grafana解析返回的数据Proxy: Grafana后端通过API访问数据源,然后返回给浏览器展示 |
| Database | InfluxDB数据源对应数据库名称 |
| User | InfluxDB数据源账号 |
| Password | InfluxDB数据源密码 |


CentOS7中Grafana配置文件位置是: **/etc/grafana/grafana.ini** CentOS7中Grafana日志文件位置是: **/var/log/grafana/grafana.log**


### 第四步 集成statsd client


先安装`go-statsd-client`



go get github.com/cactus/go-statsd-client
复制代码


再编写代码,收集统计数据



import (
“fmt”
“log”
“time”

"github.com/cactus/go-statsd-client/statsd"

)

func main() {
// 第一个参数是连接地址,
// 第二个参数是statsd客户端前缀,这里我们不要前缀,直接设为""
// 第三个参数是发送数据包的最大时间间隔,这里设为300毫秒
// 第四个参数是数据包最大达到多少时,就发送,这里设为512字节
client, err := statsd.NewBufferedClient(“127.0.0.1:8125”, “”, 300*time.Millisecond, 512)

if err != nil {
	log.Fatal(err)
}

defer client.Close()

for {
	time.Sleep(300 * time.Millisecond)
	if err := client.Timing("get\_article", 100, 1); err != nil {
		fmt.Println(err)
	} else {
		fmt.Println("Your Send operation was successful")
	}
}

}
复制代码


### 第五步 创建仪表盘(Dashboard)


仪表盘(Dashboard),就是管理各种图表的地方。 仪表盘由 **行**(Row)+ **图表面板**(Panel)组成。


点击**New**创建Dashboard 






然后点击**Graph**来添加曲线图 






点击**Panel Title**,再点击**Edit** 






在**General**中填写Title 






在**Metrics**中选择数据源为**golang123**,然后依下图箭头处填写 








| 配置项 | 说明 |
| --- | --- |
| Data Source | 选择Grafana已配置的数据源 |
| FROM default | 默认Schema |
| FROM measurement | 对应的InfluxDB的表名 |
| WHERE | WHERE条件,根据自己需求选择 |
| SELECT field | 对应选的字段,可根据需求增减 |
| SELECT mean() | 选择的字段对应的InfluxDB的函数 |
| GROUP BY time() | 根据时间分组 |
| GROUP BY fill() | 当不存在数据时,以null为默认值填充 |


最后,我们点击右上角查看近半小时内get\_article的调用情况 







转载于:https://juejin.im/post/5c5062e451882514e75b4c7a



![img](https://img-blog.csdnimg.cn/img_convert/83bdaf8f80ec0e55cd81e48cf9c2c1e1.png)
![img](https://img-blog.csdnimg.cn/img_convert/3d28c4c4f2f6475fd0ef8ebfd8aa6057.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang中的Gin框架提供了一种简单而强大的方法来构建Web应用程序。与此同时,Golang标准库中的"net/http"包提供了构建WebSocket服务器和客户端的功能。 首先,我们来看一下如何使用Gin和WebSocket构建WebSocket服务器。首先,需要导入相关的包: ```go import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" ) ``` 接下来,在Gin中创建一个WebSocket处理函数: ```go func WebSocketHandler(c *gin.Context) { upgrader := websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } conn, err := upgrader.Upgrade(c.Writer, c.Request, nil) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } for { messageType, message, err := conn.ReadMessage() if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } err = conn.WriteMessage(messageType, message) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } } } ``` 上面的代码创建了一个基本的WebSocket处理函数。它使用WebSocket标准库中的Upgrader结构来处理升级连接并创建一个WebSocket连接。 然后,我们需要在Gin中设置路由来处理WebSocket请求: ```go router := gin.Default() router.GET("/ws", WebSocketHandler) ``` 以上代码将在根路径下创建一个WebSocket处理函数。 接下来,我们来看一下如何使用Golang和Gin构建WebSocket客户端。首先,我们需要导入所需的包: ```go import ( "github.com/gorilla/websocket" "net/http" ) ``` 然后,我们可以使用以下代码来创建一个WebSocket客户端: ```go func main() { c, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil) if err != nil { log.Fatal("dial:", err) } defer c.Close() done := make(chan struct{}) go func() { defer close(done) for { _, message, err := c.ReadMessage() if err != nil { log.Println("read:", err) return } log.Printf("recv: %s", message) } }() ticker := time.NewTicker(time.Second) defer ticker.Stop() for { select { case <-done: return case <-ticker.C: err := c.WriteMessage(websocket.TextMessage, []byte("Hello, Server!")) if err != nil { log.Println("write:", err) return } } } } ``` 上面的代码创建了一个WebSocket客户端,它使用WebSocket标准库中的`DefaultDialer`结构来建立WebSocket连接。 以上就是使用Golang Gin和WebSocket构建WebSocket客户端和服务器的简单示例。这些代码可以帮助我们使用Gin和Golang的标准库来构建强大的Web应用程序,并处理WebSocket通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值