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=tvkiosk
影藏左边菜单栏、左上角参数、时间范围和自动刷新时间,不能在页面操作 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的所有可选值
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: