用Grafana将PostgreSQL的数据制成图表
使用OSS的图形生成工具Grafana,想要在PostgreSQL数据库中以图表形式展示数据,这样的文章。
Grafana与Prometheus结合在Kubernetes领域中通常用作为显示CPU使用率等指标信息的图形工具,但由于数据源是Prometheus,回溯一定期限(如半年前)以显示图形变得困难,因此在旧数据方面,将其保留在数据库中(或重新加载数据到数据库)并进行显示可能是有用的要求或想法。
如果你有AWS账户,并且熟悉的话,大约5分钟就可以办好。
创建虚拟机
首先,在AWS Lightsail上创建一个虚拟机。同时将其兼作PostgreSQL和Grafana服务器。
https://aws.amazon.com/jp/lightsail-vps/
只要按照本文所述的方法执行,即使是512MB内存和1个vCPU的实例,在第一个月也是免费的。
安装PostgreSQL
登录到创建的虚拟机上,并使用ssh连接,获得root权限。
Using username "centos".
Authenticating with public key "imported-openssh-key"
[centos@ip-172-26-4-90 ~]$ sudo -i
[root@ip-172-26-4-90 ~]#
安装PostgreSQL。
# yum -y install postgresql-server
# postgresql-setup initdb
# systemctl enable postgresql.service
# systemctl start postgresql.service
创造一个grafana要连接的数据库。
# sudo -u postgres psql -c "CREATE DATABASE grafana;"
创建一个名为data1的数据表作为图表的基础。允许PUBLIC进行SELECT操作。
# cat > create_table.sql << 'EOF'
CREATE TABLE data1
(
id serial,
time timestamp with time zone NOT NULL DEFAULT now(),
data integer NOT NULL,
PRIMARY KEY (id)
)
EOF
# sudo -u postgres psql -d grafana < create_table.sql
# sudo -u postgres psql -d grafana -c "GRANT SELECT ON data1 TO PUBLIC;"
为了后续数据展示的目的,暂时创建几条记录。
# sudo -u postgres psql -d grafana -c "INSERT INTO data1 (data) values (1);"
# sudo -u postgres psql -d grafana -c "INSERT INTO data1 (data) values (2);"
# sudo -u postgres psql -d grafana -c "INSERT INTO data1 (data) values (3);"
# sudo -u postgres psql -d grafana -c "SELECT * from data1;"
could not change directory to "/root"
id | time | data
----+-------------------------------+------
1 | 2020-12-09 06:39:12.954322+00 | 1
2 | 2020-12-09 06:39:16.469155+00 | 2
3 | 2020-12-09 06:39:19.221617+00 | 3
(3 rows)
为了使grafana用户能够登录并显示数据,调整PostgreSQL的认证设置。
# sed -i /var/lib/pgsql/data/pg_hba.conf -e "s/host all all 127.0.0.1\/32 ident/host all all 127.0.0.1\/32 md5/"
# systemctl restart postgresql.service
# sudo -u postgres psql -d grafana -c "CREATE USER grafana WITH LOGIN PASSWORD 'grafana';"
# psql -h 127.0.0.1 -d grafana -U grafana -W -c "SELECT * FROM data1;"
Password for user grafana:
id | time | data
----+-------------------------------+------
1 | 2020-12-09 06:39:12.954322+00 | 1
2 | 2020-12-09 06:39:16.469155+00 | 2
3 | 2020-12-09 06:39:19.221617+00 | 3
(3 rows)
安装Grafana
请查看以下链接以获取详细信息:
https://grafana.com/docs/grafana/latest/installation/rpm/
1.安装Grafana。
# cat > /etc/yum.repos.d/grafana-oss.repo << 'EOF'
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
# yum install -y grafana
# systemctl daemon-reload
# systemctl enable grafana-server
# systemctl start grafana-server

通过Web浏览器访问以下URL,并登录Grafana。
http://<虚拟机的IP地址>:3000
由于初始用户的用户名和密码是admin / admin,请尽快登录并更改密码,这是非常理想的。

添加PostgreSQL数据源




使用 PostgreSQL 数据进行图表展示。





将每个分段的记录数绘制成图表。
如果能来到这一步,之后可以通过操纵屏幕进行各种改变和修改面板的标题。
另外,先前显示的图表是基于data1表格中的数据值所生成的,但也可以简单地将data1表格中的记录数量作为时间序列的图表进行表示。这在应用于日志数量等方面非常方便。

在设置完成后,在服务器端的提示符下,只需输入以下命令,即可将每分钟执行的命令次数反映在图表中。
# sudo -u postgres psql -d grafana -c "INSERT INTO data1 (data) values (1);"

Grafana真厉害,因为要自己编写SQL语句来实现这个功能很困难,而Grafana可以通过几次鼠标点击就能实现图形显示。
将Grafana的图表嵌入HTML文档中。(附加信息)