在CentOS 8上安装Graphite和Graphite-Web | RHEL 8

时间:2020-02-23 14:31:11  来源:igfitidea点击:

Graphite是开发人员友好的监视工具,其硬件资源占用量少。
Graphite被创建为具有容错能力和高可用性。
作为开发人员,我们可以快速创建一个应用程序,该应用程序收集要绘制图形的数字时间序列数据,然后将Graphite的处理后端发送到Carbon服务。
数据存储在Graphite的专用数据库中,并按需绘制以进行图形显示。

如果磁盘无法跟上发生的大量小写操作的速度(每个数据点只有几个字节,但是大多数标准磁盘每秒最多不能执行数千个I/O操作),则Graphite的后端会缓存传入的数据(如果它们很小)。

如果我们不是从头开始编写收集器应用程序,则可以查看可用于数据收集和转发的工具。
在本文中,我们将引导我们完成在CentOS 8上完全安装Graphite的过程。
使用Podman的RHEL 8服务器。
该应用程序将在具有Systemd服务的容器中运行,以管理其生命周期。

Graphite的主要部件包括:

  • carbon –监听时间序列数据的Twisted守护进程
  • whisper–用于存储时间序列数据的简单数据库库(设计与RRD类似)
  • graphite web app – Django webapp,使用Cairo按需绘制图形

在CentOS 8上安装Graphite和Graphite-Web | RHEL 8

我们将使用Podman容器运行时在CentOS 8上运行Graphite。
RHEL 8.除非遵循官方项目文档中的建议,否则无需任何自定义即可进行后续步骤。
系统必须是最新的:

sudo dnf -y update
sudo systemctl reboot

步骤1:在CentOS 8 RHEL 8上安装容器工具

等待系统上线,然后登录并安装Container Tools。

sudo dnf module install container-tools -y

查询已安装的Podman的版本以确认是否成功。

$podman version
Version:            1.6.4
RemoteAPI Version:  1
Go Version:         go1.13.4
OS/Arch:            linux/amd64

已安装其他容器管理工具,例如buildah和skopeo:

$buildah version
Version:         1.11.6
Go Version:      go1.13.4
Image Spec:      1.0.1-dev
Runtime Spec:    1.0.1-dev
CNI Spec:        0.4.0
libcni Version:
image Version:   5.0.0
Git Commit:
Built:           Thu Jan  1 01:00:00 1970
OS/Arch:         linux/amd64
$skopeo -version
skopeo version 0.1.40

步骤2:使用Podman在CentOS 8 RHEL 8上运行Graphite Container

可以在Graphite的Docker存储库中找到有关使用Graphite Docker镜像的详细指南。
第一步是我们获取最新的Docker镜像。
让我们切换到root用户使用。

sudo -i

下载最新的Graphite和Statsd容器镜像。

# podman pull docker.io/graphiteapp/graphite-statsd
Trying to pull docker.io/graphiteapp/graphite-statsd...
Getting image source signatures
Copying blob 700de820179a done
Copying blob df20fa9351a1 done
Copying blob f9a569415da5 done
Copying blob 8f0c7d0dc99e done
Copying config 875c7f22f4 done
Writing manifest to image destination
Storing signatures
875c7f22f4cd1b4da99fe6a3ab213e84567d42ed8f544655bfe8694c8d290345

列出可用的镜像:

# podman images
REPOSITORY                              TAG      IMAGE ID       CREATED        SIZE
docker.io/library/ubuntu                latest   9140108b62dc   2 weeks ago    75.3 MB
docker.io/graphiteapp/graphite-statsd   latest   875c7f22f4cd   2 months ago   651 MB

我们下载的镜像包括以下组件:

  • Nginx –Graphite仪表板反向代理
  • Graphite–前端仪表板
  • Carbon–后端
  • Statsd –基于UDP的后端代理

映射端口

8080nginx
20032003carbon receiver – plaintext
20042004carbon receiver – pickle
20232023carbon aggregator – plaintext
20242024carbon aggregator – pickle
80808080Graphite internal gunicorn port (without Nginx proxying).
81258125statsd
81268126statsd admin

创建数据目录以保留容器数据。
在启动容器时,它们将映射到容器卷。

# mkdir -p /data/graphite/{data,logs,conf,statsd_config}

在运行命令之前,将时区更改为正确的设置。

podman run -d \
 --name graphite \
 --restart=always \
 -p 80:80 \
 -p 2003-2004:2003-2004 \
 -p 2023-2024:2023-2024 \
 -p 8125:8125/udp \
 -p 8126:8126 \
 -v /data/graphite/data:/opt/graphite/storage \
 -v /data/graphite/conf:/opt/graphite/conf \
 -v /data/graphite/statsd_config:/opt/statsd/config \
 -v /data/graphite/logs:/var/log \
 -e GRAPHITE_TIME_ZONE='Africa/Nairobi' \
 graphiteapp/graphite-statsd

列出运行中的容器以查看Graphite容器是否正在运行。

# podman ps
CONTAINER ID  IMAGE                                         COMMAND  CREATED         STATUS             PORTS                                       NAMES
0a79ef44ad59  docker.io/graphiteapp/graphite-statsd:latest           18 seconds ago  Up 17 seconds ago  0.0.0.0:80->80/tcp, 0.0.0.0:8125->8125/udp  graphite

检查已发布和占用的端口。

# podman port -l
8125/udp -> 0.0.0.0:8125
8126/tcp -> 0.0.0.0:8126
80/tcp -> 0.0.0.0:80
2003/tcp -> 0.0.0.0:2003
2004/tcp -> 0.0.0.0:2004
2023/tcp -> 0.0.0.0:2023
2024/tcp -> 0.0.0.0:2024

第3步:打开Graphite Web界面

许可模式下的Pu SELinux:

sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

使用端口80上的服务器IP地址访问Graphite Web控制台。

默认的登录凭据是:

Username: root
Password: root

首次登录后,请在http://ip-address/admin/auth/user/1 /上更改此登录凭据。
单击"更改密码"链接以启动root用户密码更改。

注销并使用新密码设置返回。

步骤4:使用Systemd管理Graphite容器

为了确保我们的容器在系统启动时启动,让我们创建新的Systemd服务单元文件。

sudo tee /etc/systemd/system/graphite-podman.service<<EOF
[Unit]
Description=Graphite Docker Container
Documentation=https://github.com/graphite-project/docker-graphite-statsd
[Service]
Type=simple
TimeoutStartSec=0
Restart=on-failure
RestartSec=30s
ExecStartPre=-/usr/bin/podman kill graphite
ExecStartPre=-/usr/bin/podman rm graphite
ExecStartPre=/usr/bin/podman pull graphiteapp/graphite-statsd
ExecStart=/usr/bin/podman run \
            --name graphite \
            --restart=always \
            -p 80:80 \
            -p 2003-2004:2003-2004 \
            -p 2023-2024:2023-2024 \
            -p 8125:8125/udp \
            -p 8126:8126 \
            -v /data/graphite/data:/opt/graphite/storage \
            -v /data/graphite/conf:/opt/graphite/conf \
            -v /data/graphite/statsd_config:/opt/statsd/config \
            -v /data/graphite/logs:/var/log \
            -e GRAPHITE_TIME_ZONE='Africa/Nairobi' \
            graphiteapp/graphite-statsd
SyslogIdentifier=graphite
ExecStop=/usr/bin/podman stop graphite
[Install]
WantedBy=multi-user.target
EOF

重新加载Systemd以获取新的单位。

sudo systemctl daemon-reload

确认创建了graphite-podman单位文件。

# systemctl list-unit-files graphite-podman.service
UNIT FILE               STATE
graphite-podman.service disabled
1 unit files listed.

启用服务器启动时启动的服务。

# systemctl enable graphite-podman.service
Created symlink /etc/systemd/system/multi-user.target.wants/graphite-podman.service → /etc/systemd/system/graphite-podman.service.

终止正在运行的容器,以确认服务正在运行。

# podman rm -f graphite
0a79ef44ad5979ade39a3f0c14ca5351771106b429a8318b7912cc9323e3da20

确认容器已被杀死。

# podman ps
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES

启动Graphite Systemd服务。

# systemctl start graphite-podman.service

检查服务状态:

# systemctl status graphite-podman.service
● graphite-podman.service - Graphite Docker Container
   Loaded: loaded (/etc/systemd/system/graphite-podman.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-10-11 05:50:04 CEST; 22s ago
     Docs: https://github.com/graphite-project/docker-graphite-statsd
  Process: 7182 ExecStartPre=/usr/bin/podman pull graphiteapp/graphite-statsd (code=exited, status=0/SUCCESS)
  Process: 7171 ExecStartPre=/usr/bin/podman rm graphite (code=exited, status=1/FAILURE)
  Process: 7160 ExecStartPre=/usr/bin/podman kill graphite (code=exited, status=125)
 Main PID: 7194 (podman)
    Tasks: 13 (limit: 24402)
   Memory: 32.3M
   CGroup: /system.slice/graphite-podman.service
           └─7194 /usr/bin/podman run --name graphite --restart=always -p 80:80 -p 2003-2004:2003-2004 -p 2023-2024:2023-2024 -p 8125:8125/udp -p 8126:8126 -v /d>
Oct 11 05:50:16 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:16 :: [tagdb] Tagging carbon.aggregator.45793992f2ac-a.memUsage, carbon.aggregat>
Oct 11 05:50:16 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:16 :: [tagdb] Tagged carbon.aggregator.45793992f2ac-a.memUsage, carbon.aggregato>
Oct 11 05:50:16 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:16 :: [tagdb] Tagging carbon.aggregator.45793992f2ac-a.blacklistMatches, carbon.>
Oct 11 05:50:17 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:17 :: [tagdb] Tagged carbon.aggregator.45793992f2ac-a.blacklistMatches, carbon.a>
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [listener] MetricLineReceiver connection with 127.0.0.1:60582 established
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [listener] MetricLineReceiver connection with 127.0.0.1:60582 closed clean>
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [tagdb] Tagging carbon.aggregator.45793992f2ac-a.destinations.127_0_0_1:20>
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [tagdb] Tagged carbon.aggregator.45793992f2ac-a.destinations.127_0_0_1:200>
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [tagdb] Tagging carbon.agents.45793992f2ac-a.avgUpdateTime, stats.timers.v>
Oct 11 05:50:26 centos-01.theitroad.com graphite[7194]: 11/10/2017 03:50:26 :: [tagdb] Tagged carbon.agents.45793992f2ac-a.avgUpdateTime, stats.timers.vi>

使用Podman CLI列出正在运行的容器。

# podman ps
CONTAINER ID  IMAGE                                         COMMAND  CREATED             STATUS                 PORTS                                       NAMES
45793992f2ac  docker.io/graphiteapp/graphite-statsd:latest           About a minute ago  Up About a minute ago  0.0.0.0:80->80/tcp, 0.0.0.0:8125->8125/udp  graphite

如果服务器曾被重新引导,请执行系统重新引导以确保容器已启动。

sudo reboot

我们可以确认容器以不同的ID启动:

# podman ps
CONTAINER ID  IMAGE                                         COMMAND  CREATED         STATUS             PORTS                                       NAMES
c57a157a3600  docker.io/graphiteapp/graphite-statsd:latest           34 seconds ago  Up 33 seconds ago  0.0.0.0:80->80/tcp, 0.0.0.0:8125->8125/udp  graphite

安装Graphite之后,请访问Graphite文档以了解下一步。