当前位置 : 首页 » 文章分类 :  开发  »  Grafana

Grafana

Grafana 是一个开源的跨平台度量分析和可视化和告警工具。


Docker 安装 Grafana

Installing Grafana
https://grafana.com/docs/grafana/latest/installation/

Installing using Docker
https://grafana.com/docs/grafana/latest/installation/docker/

第一次执行时直接从 dockerhub 拉取最新版本 grafana

docker run -d --rm \
--network host \
--name grafana \
-e "GF_SERVER_HTTP_PORT=3001" \
-e "GF_SECURITY_ALLOW_EMBEDDING=true" \
-e "GF_AUTH_ANONYMOUS_ENABLED=true" \
-v /data/grafana:/var/lib/grafana \
grafana/grafana

解释下:
-d 后台运行
--rm 停止容器后删掉容器文件
--network host 与宿主机完全共享网络,默认是bridge桥接,无法在nginx中通过localhost转发请求
--name grafana 指定启动的容器名,方便按名称stop等操作
-e "GF_SERVER_HTTP_PORT=3001" 通过环境变量修改端口为 3001
-e "GF_SECURITY_ALLOW_EMBEDDING=true" 允许嵌入 iframe
-e "GF_AUTH_ANONYMOUS_ENABLED=true" 允许匿名登录
-v /data/grafana:/var/lib/grafana 映射数据目录,方便容器重启后数据可保留,注意本机的 /data/grafana 目录要给容器内的用户开发写权限

安装完成后本地浏览器访问 http://localhost:3001/ 能打开 grafana 登录界面说明安装没问题。
初始账号/密码为: admin / admin

我在 vps 装了一个,又用 nginx 做了域名转发,可直接通过下面链接访问我的 grafana 试用
http://grafana.masikkk.com/


通过环境变量配置 Grafana

Override configuration with environment variables
https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#override-configuration-with-environment-variables

Grafana 配置的环境变量格式为 GF_<SectionName>_<KeyName>
SectionName 是方括号内的部分,.- 需要用下划线 _ 代替。

例如 server 配置块下的 http_port 对应的环境变量为 GF_SERVER_HTTP_PORT
security 配置块下的 allow_embedding 对应的环境变量为 GF_SECURITY_ALLOW_EMBEDDING


can’t create directory ‘/var/lib/grafana/plugins’

问题:
docker 启动 grafana 报错:

GF_PATHS_CONFIG='/etc/grafana/grafana.ini' is not readable.
GF_PATHS_DATA='/var/lib/grafana' is not writable.
GF_PATHS_HOME='/usr/share/grafana' is not readable.
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later
mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied

原因:
启动参数有 -v /data/grafana:/var/lib/grafana 目录映射,grafana 没有此目录的写权限
去掉目录映射启动 grafana 容器,进去看到用户是

lightsail:/usr/share/grafana$ id
uid=472(grafana) gid=0(root) groups=0(root)

在宿主机上用户是

$ id
uid=1000(centos) gid=1000(centos) 组=1000(centos),4(adm),10(wheel),190(systemd-journal),994(docker)

/data/grafana 目录的用户是 centos

解决:
给 /data/grafana 添加 777 权限
chmod -R 777 /data/grafana/


nginx代理后的grafana登录报错 Login failed origin not allowed

问题:
直接机器 ip:3001 登录 grafana 成功
通过 nginx 代理后登录失败,报错:
Login failed
origin not allowed

解决:
proxy 转发增加 proxy_set_header Host $host; 配置,将原始 host 写入 header

location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
}

iframe 嵌入 Grafana 页面

配置 Grafana 允许嵌入页面和匿名访问

1、将 security 配置块下的 allow_embedding 设为为 true(默认是 false),允许嵌入页面,对应的环境变量为 GF_SECURITY_ALLOW_EMBEDDING
auth.anonymous 配置块下的 enabled 设置为 true,允许匿名访问,对应的环境变量为 GF_AUTH_ANONYMOUS_ENABLED

获取 Grafana Dashboard 或 Panel 链接

2、在 dashboard 或 panel 上点“分享”
Dashboard 选 Link,Panel 选 Embed(选 Embed 可得到隐藏了 Grafana 菜单的纯净数据面板链接,选 Link 的链接还有菜单)
关闭 Lock time range(否则时间范围是固定的,无法自动刷新)
拷贝 Link URL

配置 kiosk 隐藏菜单栏

3、配置 kiosk 菜单展示属性
kiosk=tv 隐藏左边菜单栏和左上角参数,保留右上角时间范围和自动刷新时间,这种可在嵌入页面操作 Grafana
例如 http://grafana.masikkk.com/d/xfpJB9FGz/node-exporter-dashboard-en-20201010-starsl-cn?orgId=1&theme=light&kiosk=tv
kiosk 影藏左边菜单栏、左上角参数、时间范围和自动刷新时间,不能在页面操作 Grafana,嵌入的更纯粹
例如 http://grafana.masikkk.com/d/ba3a3431-c157-4c1b-be94-c5973fab03d7/jvm-micrometer?orgId=1&refresh=30s&kiosk

iframe 自适应宽高配置

4、iframe 宽高自适应可以参考
优雅的实现 iframe 高宽度自适应
https://youwu.today/skill/web/how-to-make-the-iframe-responsive/


Grafana 添加 Prometheus 数据源

进去后点击 Add data source
选择 Prometheus
URL 填入 prometheus 地址,本地安装的 Prometheus 默认地址为 http://localhost:9090 ,我配置了域名和 nginx 转发,地址是 http://prometheus.masikkk.com/


Grafana添加Prometheus数据源

导入公共 dashboard

grafana 官方有很多配置好的通用 dashboard
https://grafana.com/grafana/dashboards

在左侧 Filter by 根据 Data Source 进行过滤,选出 Prometheus 数据源的 dashboard
每个发布的 dashboard 都有个 id, 在自己的 grafana 中直接用 id 就可以 import

点击 dashboard,选择 new -> import,在 Import via grafana.com 中填入公开 dashboard 的 url,
比如导入 id 为 4701 的 JVM (Micrometer) dashboard,填入 https://grafana.com/grafana/dashboards/4701

导入时设置已添加的 Prometheus 数据源, 导入后如下图


jvm dashboard

4701 JVM (Micrometer)

4701 JVM (Micrometer)
https://grafana.com/grafana/dashboards/4701

11074 Node Exporter Dashboard

Node Exporter Dashboard EN 20201010-StarsL.cn
https://grafana.com/grafana/dashboards/11074-node-exporter-for-prometheus-dashboard-en-v20201010/


自己配置 dashboard

除了通用监控指标的 dashboard, 还可以给自定义上报的监控指标配置 dashboard
grafana 中点左侧的 加号 create dashboard, 新建一个 dashboard, 点右上角的齿轮进入此 dashboard 的配置

先编辑下 dashboard 的变量,添加一个 application 变量,query 里填入 grafana的 label_values(application) 函数,列出所有指标中 label 名为 application 的所有值供列表选择, application label 是在 spring boot 里配置的 actuator 选项,给所有指标添加应用名 label 供筛选。
query 里填入查询语句后,如果下面马上给列出 preview of values 候选值,就说明 query 语句没问题,如下图:


dashboard 变量配置

我配了我博客几个接口的qps和时间监控,如下


博客主要服务监控dashboard

PromQL 如下

# 访问量上报 QPS
irate(http_server_requests_seconds_count{application="statistic",exception="None",method="POST",uri="/statistic"}[1m])
# 查询评论 QPS
irate(http_server_requests_seconds_count{application="disqus",exception="None",method="GET",uri="/comments"}[1m])
# 访问量上报 响应时间
irate(http_server_requests_seconds_sum{application="statistic",exception="None",method="POST",uri="/statistic"}[1m])
# 查询评论 响应时间
irate(http_server_requests_seconds_sum{application="disqus",exception="None",method="GET",uri="/comments"}[1m])

Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手)
http://www.itmuch.com/spring-boot/actuator-prometheus-grafana/


Grafana变量函数

label_values(label)
返回Promthues所有监控指标中,标签名为 label 的所有可选值

label_values(metric, label)
返回Promthues所有监控指标metric中,标签名为label的所有可选值

https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/grafana/templating#shi-yong-bian-liang-guo-lv-shi-jian-xu-lie


上一篇 LeetCode.101.Symmetric Tree 对称二叉树

下一篇 LeetCode.053.Maximum Subarray 最大连续子序列和

阅读
评论
1.7k
阅读预计7分钟
创建日期 2020-01-17
修改日期 2023-09-10
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论