【小沐学Python】Python实现Web图表功能(Grafana入门)

69 篇文章 15 订阅

在这里插入图片描述

🎈🎈🎈Python实现Web图表功能系列:🎈🎈🎈
1🎈【Web开发】Python实现Web图表功能(D-Tale入门)🎈
2🎈【Web开发】Python实现Web图表功能(D-Tale编译)🎈
3🎈【Web开发】Python实现Web图表功能(pyecharts,Flask)🎈
4🎈【Web开发】Python实现Web图表功能(ECharts.js,Flask)🎈
5🎈【Web开发】Node实现Web图表功能(ECharts.js,Vue)🎈
6🎈【Web开发】Node实现Web图表功能(ECharts.js,React)🎈
7🎈【Web开发】Python实现Web图表功能(Grafana入门)🎈

1、简介

https://grafana.com/

Dashboard anything. Observe everything.

Query, visualize, alert on, and understand your data no matter where it’s stored. With Grafana you can create, explore, and share all of your data through beautiful, flexible dashboards.

Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据。

Grafana是一个开源的,拥有丰富dashboard和图表编辑的指标分析平台,和Kibana不同的是Grafana专注于时序类图表分析,而且支持多种数据源,如Graphite、InfluxDB、Elasticsearch、Mysql、K8s、Zabbix等。

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

Grafana允许您查询,可视化,警报和了解您的指标,无论它们存储在何处。创建、探索并与团队共享精美的仪表板,并培养数据驱动型文化。最简单的入门方法是使用Grafana云,这是我们完全可组合的可观察性堆栈。
在这里插入图片描述

1.1 为什么选择Grafana

1.1.1 统一数据,而不是数据库

Grafana 不需要您将数据引入后端存储或供应商数据库。相反,Grafana采用一种独特的方法,通过统一现有数据来提供“单一管理平台”,无论数据位于何处。

使用Grafana,您可以获取任何现有数据 - 无论是来自Kubernetes集群,树莓派,不同的云服务,甚至是Google表格 - 并根据需要将其可视化,所有这些都来自一个仪表板。
在这里插入图片描述

1.1.2 每个人都可以看到的数据

Grafana 建立在以下原则之上:组织中的每个人都可以访问数据,而不仅仅是单个 Ops 人员。

通过使数据民主化,Grafana有助于促进一种文化,在这种文化中,数据可以很容易地被需要它的人使用和访问,帮助打破数据孤岛并赋予团队权力。

1.1.3 任何人都可以使用的仪表板

Grafana 仪表板不仅为从众多来源收集的数据赋予了富有洞察力的含义,而且您还可以与其他团队成员共享您创建的仪表板,从而可以一起浏览数据。

借助Grafana,任何人都可以创建和共享动态仪表板,以促进协作和透明度。

1.1.4 灵活性和多功能性

将任何数据转换并转换为灵活多样的仪表板。与其他工具不同,Grafana允许您专门为您和您的团队构建仪表板。

借助高级查询和转换功能,您可以自定义面板以创建对您真正有帮助的可视化效果。

1.2 Grafana特点

可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
通知:警报更改状态时,它会发出通知。接收电子邮件通知。
动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

1.2.1 图表

从热图到直方图。地理地图的图形。Grafana 具有快速灵活的可视化功能,可让您以任何您想要的方式可视化数据。
在这里插入图片描述

1.2.2 插件

使用格拉法纳插件连接您的工具和团队。数据源插件通过 API 挂接到现有数据源,并实时呈现数据,而无需您迁移或引入数据。
在这里插入图片描述

1.2.3 警报

借助 Grafana 警报,您可以在一个简单的 UI 中创建、管理和静音所有警报,从而轻松整合和集中所有警报。
在这里插入图片描述

1.2.4 转换

转换允许您跨不同的查询和数据源重命名、汇总、合并和执行计算。
在几秒钟内将非时间序列数据转换为表(例如,JSON 文件甚至简单的查找表),无需任何自定义或额外的开销。
在这里插入图片描述

1.2.5 附注

使用来自不同数据源的丰富事件对图形进行批注。将鼠标悬停在事件上会显示完整的事件元数据和标记。
在这里插入图片描述

1.2.6 面板编辑器

面板编辑器通过一致的 UI 轻松配置、自定义和浏览所有面板,用于在所有可视化中设置数据选项。
在这里插入图片描述

2、Grafana Cloud

开始使用Grafana Cloud。如果你还不熟悉它,Grafana Cloud是开始观察指标(Prometheus和Graphite)、日志(Grafana Loki)、跟踪(Grafana Tempo)和仪表盘的最简单方法。我们有免费和付费的Grafana云计划,以满足各种使用情况 - 你现在就可以免费注册。

作为完全托管的服务提供,Grafana 云是采用 Grafana 的最快方式,包括一个可扩展的托管后端,用于指标、日志和跟踪。由Grafana实验室管理,为个人,团队和大型企业提供免费和付费选项。包括一个强大的免费套餐,可访问 10k 个指标、50GB 日志和 50GB 跟踪,供 3 个用户使用。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、Grafana 本地

在这里插入图片描述
在这里插入图片描述

3.1 安装

https://grafana.com/grafana/download?pg=get&platform=windows&plcmt=selfmanaged-box1-cta1

  • 支持的操作系统:
    (1)Debian / Ubuntu
    (2)RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)
    (3)macOS
    (4)Windows

  • 支持的数据库:
    (1)SQLite 3
    (2)MySQL 5.7+
    (3)PostgreSQL 10+

  • 支持的浏览器:
    (1)Chrome/Chromium
    (2)Firefox
    (3)Safari
    (4)Microsoft Edge
    (5)Internet Explorer 11 is only fully supported in Grafana versions prior v6.0.

在这里插入图片描述

3.2 配置

  • 单击下载安装程序。
  • 打开并运行安装程序。
  • 要运行 Grafana,请打开浏览器并转到 Grafana 端口(默认 http://localhost:3000/),然后按照入门中的说明进行操作。
  • 通过执行位于目录中的 启动 Grafana,最好是从命令行。如果要将Grafana作为 Windows 服务运行,请下载 NSSM。使用该工具将格Grafana加为Windows服务非常容易。

在这里插入图片描述在这里插入图片描述
Note: The default Grafana port is 3000. This port might require extra permissions on Windows. If it does not appear in the default port, you can try changing to a different port.

Go into the conf directory and copy sample.ini to custom.ini. Note: You should edit custom.ini, never defaults.ini.
Edit custom.ini and uncomment the http_port configuration option (; is the comment character in ini files) and change it to something like 8080 or similar. That port should not require extra Windows privileges.

On Windows, the sample.ini file is located in the same directory as defaults.ini file. It contains all the settings commented out. Copy sample.ini and name it custom.ini.

进入conf目录并将配置文件sample复制为custom,编辑custom配置文件,Grafana的默认端口为3000,此端口需要Windows上的额外权限,编辑custom并取消注释http_port配置选项(;是ini文件中的注释字符)并将其更改为类似8080或类似的内容,该端口不需要额外的Windows权限。

3.3 插件

使用grafana-cli工具安装

#获取可用插件列表

grafana-cli plugins list-remote  

修改图形为饼状
grafana-cli plugins install grafana-piechart-panel
安装其他图形插件
grafana-cli plugins install grafana-clock-panel
#钟表形展示
grafana-cli plugins install briangann-gauge-panel
#字符型展示
grafana-cli plugins install natel-discrete-panel
#服务器状态
grafana-cli plugins install vonage-status-panel

#
例:grafana-cli plugins uninstall vonage-status-panel
安装和卸载后需要重启grafana才能够生效

3.4 运行

通过执行位于目录中的 启动 Grafana,最好是从命令行。

grafana-server.exe
or 
./grafana-server --config=../conf/custom.ini

在这里插入图片描述
在这里插入图片描述
打开浏览器访问:

http://localhost:3000/

在这里插入图片描述

4、Grafana 功能

4.1 数据源(Data sources)

Grafana 为您的时序数据(数据源)支持许多不同的存储后端。有关如何向 Grafana 添加数据源的说明,请参阅添加数据源。只有具有组织管理员角色的用户才能添加数据源。

部分数据源如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.2 仪表板(Dashboards)

仪表板是一组由一个或多个面板组成,这些面板组织并排列成一行或多行。Grafana附带了各种面板,可以轻松构建正确的查询,并自定义可视化,以便您可以根据需要创建完美的仪表板。每个面板都可以与来自任何已配置的Grafana数据源的数据进行交互。

仪表板快照是静态的。无法从快照重新执行查询和表达式。因此,如果更新查询或表达式中的任何变量,则不会更改仪表板数据。

在这里插入图片描述
在这里插入图片描述

4.3 面板(Panels)

该面板是格拉法纳的基本可视化构建块。每个面板都有一个特定于在面板中选择的数据源的查询编辑器。查询编辑器允许您提取完美的可视化效果以显示在面板上。

每个面板都有各种各样的样式和格式选项。面板可以在仪表板上拖放和重新排列。它们也可以调整大小。
在这里插入图片描述

4.4 可视化(Visualizations)

格拉法纳提供了各种可视化来支持不同的用例。文档的这一部分重点介绍内置面板、其选项和典型用法。

  • 图形和图表(Graphs & charts)
    Time series:时间序列是默认的和主要的图形可视化效果。
    State timeline:状态随时间变化的状态时间线。
    Status history:一段时间内定期状态的状态历史记录。
    Bar chart: 条形图显示任何分类数据。
    Histogram:直方图计算并在条形图中显示值分布。
    Heatmap:热图以二维形式可视化数据,通常用于现象的严重程度。
    Pie chart:饼图通常用于比例很重要的地方。
    Candlestick:蜡烛图通常用于财务数据,重点是价格/数据移动。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 统计数据和数字(Stats & numbers)
    Stat:大统计数据和可选迷你图的统计数据。
    Bar gauge:条形规是水平或垂直条形规。
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • 杂项(Misc)
    Table:表是主要且唯一的表可视化。
    Logs:日志是日志的主要可视化效果。
    Node Graph:有向图或网络的节点图。
    Traces:跟踪是跟踪的主要可视化效果。

在这里插入图片描述

  • 部件(Widgets)
    Dashboard list:仪表板列表可以列出仪表板。
    Alert list: 警报列表可以列出警报。
    Text panel:文本面板可以显示降价和 html。
    News panel:“新闻”面板可以显示 RSS 源。
    在这里插入图片描述
    在这里插入图片描述

5、快速入门

5.1 Build your first dashboard

5.1.1 Install Grafana

Grafana可以安装在许多不同的操作系统上。
在这里插入图片描述

5.1.2 Sign in to Grafana

  • 要首次登录格拉法纳:
  • 打开 Web 浏览器并转到 http://localhost:3000/。
    Grafana侦听的默认 HTTP 端口是,除非您配置了其他端口。3000
  • 在登录页面上,输入用户名和密码。admin
    单击“登录”。
    如果成功,您将看到更改密码的提示。
    在提示符下单击确定并更改密码。
    在这里插入图片描述
    在这里插入图片描述

5.1.3 Create a dashboard

  • 要创建您的第一个仪表板
    单击侧面菜单中仪表板图标下的新建仪表板项。
    在仪表板上,单击添加空面板。
    在这里插入图片描述
    在这里插入图片描述

  • 在“新建仪表板”/“编辑”面板视图中,转到“查询”选项卡。
    通过从数据源选择器中进行选择来配置查询。
    这将生成随机游走仪表板。
    在这里插入图片描述

  • 单击屏幕右上角的保存图标以保存仪表板。
    添加一个描述性名称,然后单击“保存”。
    在这里插入图片描述

  • 恭喜,您已经创建了第一个仪表板,它正在显示结果。
    在这里插入图片描述
    在仪表板的标题的箭头上鼠标点击,弹出编辑菜单。点击其中的Edit菜单可以对仪表盘进行重新修改。
    在这里插入图片描述

5.1.4 Add a data source

点击左上角的主菜单按钮返回主界面之后,点击中间的“Add your first data source”,进行数据源设置。
在这里插入图片描述
在数据源列表中选择需要配置的自己数据源。
在这里插入图片描述
这里我们选择使用较为广泛的 mysql。
在这里插入图片描述
填写mysql的相关参数,
在这里插入图片描述
然后点击最下面的save & test按钮,进行连接测试和保存。
在这里插入图片描述

连接 Grafana 到 MySQL 显示查询失败,为什么?
您只需要为 select 创建具有权限的用户。
您在添加数据源时指定的数据库用户应仅被授予对您要查询的指定数据库和表的 SELECT 权限。
Grafana 不会验证查询是否安全。 查询可以包括任何 SQL 语句。
例如像USE otherdb这样的语句; 和 DROP TABLE 用户; 将被忽略。
为了防止这种情况,我们强烈建议您创建一个具有受限权限的特定 mysql 用户。

CREATE USER 'grafanaReader' IDENTIFIED BY '123456';
GRANT SELECT ON db_exam.db_exam TO 'grafanaReader';

#You can use wildcards (*) in place of database or table if you want to grant access to more databases and tables.
CREATE USER 'grafanaReader' IDENTIFIED BY 'password';
GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';
1CREATE DATABASE 数据库名;
2GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
3SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');
CREATE DATABASE grafana DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use grafana;
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵1' , '1990-01-01' , '男');
insert into Student values('02' , '钱2' , '1990-12-21' , '男');
insert into Student values('03' , '孙3' , '1990-05-20' , '男');
insert into Student values('04' , '李4' , '1990-08-06' , '男');
insert into Student values('05' , '周5' , '1991-12-01' , '女');
insert into Student values('06' , '吴6' , '1992-03-01' , '女');
insert into Student values('07' , '郑7' , '1989-07-01' , '女');
insert into Student values('09' , '张8' , '2017-12-20' , '女');
insert into Student values('10' , '李9' , '2017-12-25' , '女');
insert into Student values('11' , '李10' , '2017-12-30' , '女');
insert into Student values('12' , '赵11' , '2017-01-01' , '女');
insert into Student values('13' , '孙12' , '2018-01-01' , '女');
select * from Student;
SELECT
  title as 'Title',
  user.login as 'Created By' ,
  dashboard.created as 'Created On'
 FROM dashboard
INNER JOIN user on user.id = dashboard.created_by
WHERE $__timeFilter(dashboard.created)
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double),
  'min' as metric
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
SELECT
  $__timeGroup(createdAt,'5m',0),
  sum(value_double) as value,
  hostname
FROM test_data
WHERE
  $__timeFilter(createdAt)
GROUP BY time, hostname
ORDER BY time
SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double) as min_value,
  max(value_double) as max_value
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC

在这里插入图片描述
当您第一次进入编辑模式或添加新查询时,Grafana 将尝试使用具有时间戳列和数字列的第一个表预填充查询构建器。
时间列字段是指保存您的时间值的列的名称。
度量列建议将仅包含具有文本数据类型(text、tinytext、mediumtext、longtext、varchar、char)的列。
如果您想使用具有不同数据类型的列作为度量列,您可以输入带有强制转换的列名:CAST(numericColumn as CHAR)。
您还可以在度量列字段中输入任意 SQL 表达式,这些表达式的计算结果为文本数据类型,如 CONCAT(column1, “ “, CAST(numericColumn as CHAR))。

在这里插入图片描述
在这里插入图片描述

6、Python库

6.1 grafanalib

Python library for building Grafana dashboards.

grafanalib lets you generate Grafana dashboards from simple Python scripts.
grafanalib works with Python 3.6 through 3.10.

  • build from source
$ virtualenv .env
$ . ./.env/bin/activate
$ pip install -e .
  • grafanalib is just a Python package, so:
pip install grafanalib
  • Generate the JSON dashboard like so:
$ curl -o example.dashboard.py https://raw.githubusercontent.com/weaveworks/grafanalib/main/grafanalib/tests/examples/example.dashboard.py
$ generate-dashboard -o frontend.json example.dashboard.py
  • How it works:
    查看示例目录,例如,此仪表板将使用单行配置仪表板,其中一个 QPS 图按状态代码细分,另一个延迟图显示中位数和第 99 百分位延迟。
    在代码中,这里有相当多的重复,但是一旦你弄清楚什么适合你的需求,你就可以把它排除在外。请参阅我们的编织专用定制,获取灵感。
    您可以在 readthedocs.io 上阅读整个Grafana 文档。

  • Writing dashboards
    下面将配置一个仪表板,其中包含几个使用随机游走和 Prometheus 数据源的示例面板。

from grafanalib.core import (
    Dashboard, TimeSeries, GaugePanel,
    Target, GridPos,
    OPS_FORMAT
)

dashboard = Dashboard(
    title="Python generated example dashboard",
    description="Example dashboard using the Random Walk and default Prometheus datasource",
    tags=[
        'example'
    ],
    timezone="browser",
    panels=[
        TimeSeries(
            title="Random Walk",
            dataSource='default',
            targets=[
                Target(
                    datasource='grafana',
                    expr='example',
                ),
            ],
            gridPos=GridPos(h=8, w=16, x=0, y=0),
        ),
        GaugePanel(
            title="Random Walk",
            dataSource='default',
            targets=[
                Target(
                    datasource='grafana',
                    expr='example',
                ),
            ],
            gridPos=GridPos(h=4, w=4, x=17, y=0),
        ),
        TimeSeries(
            title="Prometheus http requests",
            dataSource='prometheus',
            targets=[
                Target(
                    expr='rate(prometheus_http_requests_total[5m])',
                    legendFormat="{{ handler }}",
                    refId='A',
                ),
            ],
            unit=OPS_FORMAT,
            gridPos=GridPos(h=8, w=16, x=0, y=10),
        ),
    ],
).auto_panel_ids()
  • Generating dashboards
    如果将上述内容另存为 example.dashboard.py(后缀必须为 .dashboard.py),则可以生成包含以下内容的 JSON 仪表板:
generate-dashboard -o frontend.json example.dashboard.py
  • Generating dashboards from code
    有时,您可能需要直接从Python代码生成和上传仪表板。下面的示例为其提供了最少的代码样板:
from grafanalib.core import Dashboard
from grafanalib._gen import DashboardEncoder
import json
import requests
from os import getenv


def get_dashboard_json(dashboard, overwrite=False, message="Updated by grafanlib"):
    '''
    get_dashboard_json generates JSON from grafanalib Dashboard object

    :param dashboard - Dashboard() created via grafanalib
    '''

    # grafanalib generates json which need to pack to "dashboard" root element
    return json.dumps(
        {
            "dashboard": dashboard.to_json_data(),
            "overwrite": overwrite,
            "message": message
        }, sort_keys=True, indent=2, cls=DashboardEncoder)


def upload_to_grafana(json, server, api_key, verify=True):
    '''
    upload_to_grafana tries to upload dashboard to grafana and prints response

    :param json - dashboard json generated by grafanalib
    :param server - grafana server name
    :param api_key - grafana api key with read and write privileges
    '''

    headers = {'Authorization': f"Bearer {api_key}", 'Content-Type': 'application/json'}
    r = requests.post(f"https://{server}/api/dashboards/db", data=json, headers=headers, verify=verify)
    # TODO: add error handling
    print(f"{r.status_code} - {r.content}")


grafana_api_key = getenv("GRAFANA_API_KEY")
grafana_server = getenv("GRAFANA_SERVER")

my_dashboard = Dashboard(title="My awesome dashboard", uid='abifsd')
my_dashboard_json = get_dashboard_json(my_dashboard, overwrite=True)
upload_to_grafana(my_dashboard_json, grafana_server, grafana_api_key)

我们可以通过 grafanalib 将我们需要的 dashboard 设计好,然后通过 grafana-api
将其应用到 grafana 上面。

https://grafana.com/docs/grafana/latest/developers/http_api/
在这里插入图片描述

6.2 grafana-dashboards-builder

A wrapper around grafanalib which simplifies generating multiple dashboards.

grafanalib是一个很棒的工具,可以让你从简单的Python脚本生成格拉法纳仪表板。遗憾的是,它只能读取单个文件作为仪表板源,并且没有多个输出目录的概念。这些限制使得很难为整个 Grafana 实例提供许多文件夹和多个仪表板源。

grafana-dashboards-builder以递归方式查找目录树中的所有 .dashboard.py 文件。它生成仪表板并将其放置在代表Grafana文件夹的子目录中。

它在编写时考虑了 Kubernetes,因此即使在加载从平面 ConfigMap 挂载的源代码时,它也可以生成嵌套的输出目录结构(请参阅下面的示例)。

  • Installation:
pip install grafana-dashboards-builder
  • Usage:
grafana-dashboards-builder [OPTIONS] INPUT_DIR [OUTPUT_DIR]

INPUT_DIR is the directory tree with dashboard sources.
OUTPUT_DIR is the directory where generated dashboards are placed (defaults to ./out).

Options:
--from-configmap  generate output directories based on a source files prefix and a '--' separator
--help            Show this message and exit.


结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值