Grafana的介绍与使用

Python022

Grafana的介绍与使用,第1张

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。

①可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。

②报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。

③通知:警报更改状态时,它会发出通知。接收电子邮件通知。

④动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。

⑤混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。

⑥注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。

⑦过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

Dashboard的建立都是基于某一个数据源的,所以要先加一个数据源。

可视化方式有很多种,不过Graph、Table、Pie chart 这三种基本就已经满足数据展现要求了。

把这个Graph折线图Copy一份,改一下展现方式即可。

注意:默认添加完table后,如果有数字,会以K为单位,比如将300000展示位30k。

数字展示方式修改,Add column style:

当表格中出现数据后,需要通过筛选条件进行筛选,grafana提供了模板变量用于自定义筛选字段。

Type:定义变量类型

Query:这个变量类型允许您编写一个数据源查询,该查询通常返回一个 metric names, tag values or keys。例如,返回erver names, sensor ids or data centers列表的查询。

interval:interval值。这个变量可以代表时间跨度。不要按时间或日期直方图间隔硬编码一个组,使用这种类型的变量。

Datasource:此类型允许您快速更改整个仪表板的数据源。如果在不同环境中有多个数据源实例,则非常有用。

Custom:使用逗号分隔列表手动定义变量选项。

Constant:定义一个隐藏常数。有用的metric路径前缀的dashboards,你想分享。在dashboard export,期间,常量变量将作为一个重要的选项。

Ad hoc filters:非常特殊类型的变量,只对某些数据源,InfluxDB及Elasticsearch目前。它允许您添加将自动添加到使用指定数据源的所有metric查询的key/value 过滤器。

上面的Table和Graph分别使用了interval和query来定义变量进行筛选,不再重复。

grafana只有graph支持告警通知。

grafana的告警通知渠道有很多种,像Email、Teams、钉钉等都有支持。

在grafana.ini中开启告警:

要能发送邮件通知,首先需要在配置文件grafana.ini中配置邮件服务器等信息:

Grafana是个功能强大、展现层很漂亮的数据可视化监控工具,本篇主要介绍了Grafana基于MySQL数据源的安装及常用姿势,也支持其他数据源如ElasticSearch、InfluxDB等。更多内容可看 官网

import "workname/packetfolder"

导入多个包

方法调用 包名.函数//不是函数或结构体所处文件或文件夹名

packagename.Func()

前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名称了:

当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。下划线的作用仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数

import _ package

变量声明必须要使用否则会报错。

全局变量运行声明但不使用。

func 函数名 (参数1,参数2,...) (返回值a 类型a, 返回值b 类型b,...)

func 函数名 (参数1,参数2,...) (返回值类型1, 返回值类型2,...)

func (this *结构体名) 函数名(参数 string) (返回值类型1, 返回值类型2){}

使用大小来区分函数可见性

大写是public类型

小写是private类型

func prifunc int{}

func pubfunc int{}

声明静态变量

const value int

定义变量

var value int

声明一般类型、接口和结构体

声明函数

func function () int{}

go里面所有的空值对应如下

通道类型

内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针

func new(Type) *Type

[这位博主有非常详细的分析] https://www.01hai.com/note/av133981

Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。

goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。

同一个程序中的所有 goroutine 共享同一个地址空间。

语法格式如下:

通道(channel)是用来传递数据的一个数据结构。

通道的声明

通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。

[这里有比较详细的用例] https://www.runoob.com/go/go-interfaces.html

go里面的空接口可以指代任何类型(无论是变量还是函数)

声明空接口

go里面的的强制类型转换语法为:

int(data)

如果是接口类型的强制转成其他类型的语法为:

go里面的强制转换是将值复制过去,所以在数据量的时候有比较高的运行代价

参照的是https://github.com/caibirdme/hand-to-hand-optimize-go 这个文章

首先自己写一段demo

里面负责2件事

doSomeThingOne

genSomeBytes

运行这个程序go run main.go

To install thewrk,you need only:

git clone https://github.com/wg/wrk.git

cd wrk

make

wrk relies on the openssl and luajit, learn more from its github page

Generating requests

Our demo is listening on the port 9876 ,so let's generate some requests for that.

./wrk -c400 -t8 -d5m http://localhost:9876/test

-c400means we have 400 connections to keep open

-t8means we use 8 threads to build requests

-d5mmeans the duration of the test will last for 5 minutes

用这段命令来压服务器

Our server is very busy now and we can see some information via browser. Inputlocalhost:9876/debug/pprofyou will see:

然后用命令进入

在这里能看见各种方法的运行时间

所以我们安装Graphviz 在mac下

brew install graphviz

之后再这个(pprof)里面输入web

会生产一个svg文件

用浏览器打开我们就会看到

很显然gensomebytes里面的math方法最消耗时间。这个就是我们优化的对象

其实也很方便在

localhost:9876/debug/pprof/profile改成

localhost:9876/debug/pprof/heap

后面的结果一样。。和cpu一样可以看到那个heap占用了大量的内存到时候优化吧

https://studygolang.com/articles/1720 这个文章里面的第一个方法就可以做测试内存占用的.

有空试试把

分布式程序 A B C D 4个进程在服务器. 监控程序E 打包程序F

写一个监控程序定时监控这4个进程的CPU 内存(搞成配置文件)

达到性能瓶颈(例如 90%CPU 内存剩下10%)  E用shell触发打包程序F把pprof等信息打包.并发送邮件

给配置者.