运维系列.在Docker中使用Grafana(一)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 运维系列.在Docker中使用Grafana(一)

1. 概述

本文介绍通过官方Docker镜像安装Grafana。具体来说,它涵盖了通过Docker命令行界面(CLI)和docker-compose运行Grafana。

Grafana Docker镜像有两个版本:

  1. Grafana Enterprise: grafana/grafana-enterprise
  2. Grafana开源版: grafana/grafana-oss

推荐直接使用Grafana Enterprise默认版本。因为它是免费的,包含了所有OSS(开源)版本的功能。此外,还可以选择升级到完整的企业功能集,其中包括对企业插件的支持。

2. Grafana容器的基本用法

2.1 通过Docker CLI运行Grafana

本节将展示如何使用Docker CLI运行Grafana。要运行最新稳定版本的Grafana,请运行以下命令:

docker run -d -p 3000:3000 --name=grafana grafana/grafana-enterprise

如需停止Grafana容器,则使用docker stop,就像其它任何docker容器用法一样:

docker stop grafana

这里,我们通过容器名grafana来操作,是因为我们实例化容器(run)时,通过--name=grafana指定了容器名为grafana。因此下次你需要启动时,可以继续使用此名称来启动grafana容器:

docker start grafana

2.2 保存Grafana数据

默认情况下,Grafana使用嵌入式 SQLite3 数据库来存储配置、用户、仪表板和其他数据。当你将Docker镜像作为容器运行时,对这些Grafana数据的更改将写入容器内的文件系统,该文件系统只会在容器存在时持续存在。如果停止并删除容器,任何文件系统更改(即Grafana数据)都将被丢弃。为避免丢失数据,你可以使用 Docker卷 或绑定挂载为容器设置持久存储。

2.2.1 使用Docker卷

如果希望Docker引擎管理存储卷时,请使用Docker卷。要使用Docker卷进行持久存储,请完成以下步骤:

  1. 创建一个Docker卷供Grafana容器使用,并为其指定一个描述性名称(例如grafana-storage)。运行以下命令:
docker volume create grafana-storage

2.2.2 使用绑定挂载

如果计划在Docker中运行Grafana时将主机上的目录用于数据库或配置,则必须使用具有访问和写入映射目录权限的用户启动容器。

要使用绑定挂载,请运行以下命令:

mkdir data
docker run -d -p 3000:3000 --name=grafana \
  --user "$(id -u)" \  
  --volume "$PWD/data:/var/lib/grafana" \
  grafana/grafana-enterprise  

2.3 Grafana环境变量

就像使用MySQL官方镜像,使用Grafana也支持使用环境变量指定某些自定义配置设置。例如:

docker run -d -p 3000:3000 --name=grafana \
  -e "GF_LOG_LEVEL=debug" \
  grafana/grafana-enterprise  

3. 在Grafana容器中安装插件

你可以从官方和社区插件页面或使用自定义URL安装Grafana中的插件以安装私有插件。这些插件允许你添加新的可视化类型、数据源和应用程序,以更好地可视化数据。

Grafana目前支持三种类型的插件:面板数据源应用程序

3.1 安装步骤

要在Docker容器中安装插件,请完成以下步骤:

  1. 将要安装的插件作为逗号分隔列表传递给带有GF_INSTALL_PLUGINS环境变量的Docker。这会在Grafana启动时将每个插件名称发送到grafana-cli plugins install ${plugin}并安装它们。例如:
docker run -d -p 3000:3000 --name=grafana \
  -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" \  
  grafana/grafana-enterprise
  1. 要指定插件的版本,请将版本号添加到GF_INSTALL_PLUGINS环境变量。例如:
docker run -d -p 3000:3000 --name=grafana \
  -e "GF_INSTALL_PLUGINS=grafana-clock-panel 1.0.1" \
  grafana/grafana-enterprise  

着你如果你不指定版本号,将默认使用最新版本。

  1. 要从自定义URL安装插件,请使用以下约定指定URL:;。例如:
docker run -d -p 3000:3000 --name=grafana \
  -e "GF_INSTALL_PLUGINS=https://github.com/VolkovLabs/custom-plugin.zip;custom-plugin" \
  grafana/grafana-enterprise

以下示例运行最新稳定版本的Grafana,监听端口3000,容器名为grafana,在grafana-storage docker卷中持久存储,设置服务器根URL,并安装官方时钟面板插件。

docker volume create grafana-storage

docker run -d -p 3000:3000 --name=grafana \
  --volume grafana-storage:/var/lib/grafana \
  -e "GF_SERVER_ROOT_URL=http://my.grafana.server/" \
  -e "GF_INSTALL_PLUGINS=grafana-clock-panel" \
  grafana/grafana-enterprise

4. 通过Docker Compose运行Grafana

实际项目中,更加常用的不是通过命令,而是是使用Docker Compose来定义和共享由多个容器组成的应用程序。通过编写YAML文件(docker-compose.yaml),列出了组成应用程序的所有服务。然后可以使用单个命令以正确的顺序启动容器,并使用另一个命令关闭它们。

4.1 运行最新稳定版Grafana

本节展示如何使用Docker Compose运行Grafana。本节中的示例使用Compose版本3。

要使用Docker Compose运行最新稳定版本的Grafana,请完成以下步骤:

  1. 创建一个docker-compose.yaml文件。
  2. 将以下代码添加到docker-compose.yaml文件中。例如:
version: "3.8"
services:
  grafana:
    image: grafana/grafana-enterprise 
    container_name: grafana
    restart: unless-stopped
    ports:
     - '3000:3000'
  1. 要运行docker-compose.yaml,请运行以下命令:
docker compose up -d

其中,d表示分离模式,up表示启动容器并运行。在Docker Compose中,要停止Grafana容器,需要使用down命令:

docker compose down

4.2 持久化数据

与之前类似,我们可以使用Docker卷或绑定挂载为容器设置持久存储,以避免丢失数据。

4.2.1 使用Docker卷

现在我们先创建一个docker-compose.yaml文件,并将以下代码添加到docker-compose.yaml文件中:

version: '3.8'
services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana 
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - grafana-storage:/var/lib/grafana
volumes:
  grafana-storage: {}

保存文件并运行以下命令可编译运行容器:

docker compose up -d

4.2.2 使用绑定挂载

创建要挂载数据的目录,在本例中为当前工作目录中的/data:

mkdir $PWD/data

对应的docker-compose.yaml如:

version: '3.8'
services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    restart: unless-stopped 
    user: '0'
    ports:
      - '3000:3000'
    volumes:
      - '$PWD/data:/var/lib/grafana'

在为Grafana容器设置持久化存储时,我们介绍了两种方法,使用Docker卷、使用绑定挂载。


从配置的角度来看,使用Docker卷需要在docker-compose.yaml文件中的volumes部分定义一个命名卷(如grafana-storage),并将其挂载到容器内的特定路径(如/var/lib/grafana)。Docker会自动创建并管理这个命名卷。


而使用绑定挂载时,我们需要在docker-compose.yaml文件中直接将主机的目录路径(如$PWD/data)挂载到容器内的特定路径(如/var/lib/grafana),并且需要提前在主机上创建这个目录。


从数据管理的角度来看,使用Docker卷时,数据由Docker管理,存储在Docker主机的文件系统中,但与主机的文件系统分离。用户不需要关心数据的具体存储位置,Docker会自动管理数据的创建、存储和删除。


而使用绑定挂载时,数据存储在用户指定的主机目录中,用户需要自行管理这个目录的创建、权限设置等,对数据的存储位置有完全的控制权。


另外,从跨主机迁移的角度来看,使用Docker卷迁移数据需要将Docker卷从一个主机复制到另一个主机,或者使用分布式存储系统。而使用绑定挂载迁移数据只需要将主机上的目录复制到另一个主机的相同位置即可。


5. 构建你自己的Grafana镜像

在某些情况下,你可能需要构建自己的Grafana Docker镜像。例如,你可能想要使用不同的基础镜像,更改日志记录级别,在云上定义秘密,或配置插件。本节将介绍如何构建自定义的Grafana Docker镜像。


5.1 Alpine Linux发行版

Grafana官方提供的Docker镜像有两种变体:Alpine和Ubuntu。默认情况下,这些镜像是使用广泛使用的Alpine Linux项目基础镜像构建的。


Alpine Linux是一个独立的、非商业的通用Linux发行版,专为追求安全性、简单性和资源效率的用户而设计。与其他发行版的基础镜像相比,Alpine要小得多,从而可以创建更精简、更安全的镜像。


如果你重视安全性并希望最小化镜像的大小,建议使用Alpine变体。然而,重要的是要注意,Alpine变体使用musl libc而不是glibc和其他库。因此,某些软件可能会因其libc需求而遇到问题。尽管如此,大多数软件应该不会遇到任何问题,因此Alpine变体通常是可靠的。


目前市面上很多官方镜像都是基于Alpine,而不是Ubuntu、CentOS、等流行的发行版本的,主要也是因为Alpine镜像更小。


5.2 示例:构建预装zabbix插件的自定义Grafana镜像

在Grafana GitHub仓库中,packaging/docker/custom/目录包含一个Dockerfile(考虑到一些读者github内地访问可能受阻,这部分内容请参考附录1),你可以使用它来构建自定义的Grafana镜像。Dockerfile接受GRAFANA_VERSION、GF_INSTALL_PLUGINS和GF_INSTALL_IMAGE_RENDERER_PLUGIN作为构建参数。

以下示例演示了如何构建和运行预装zabbix插件的自定义Grafana Docker镜像。

# 进入custom目录
cd packaging/docker/custom

# 运行构建命令,指定Grafana版本和要安装的zabbix插件
docker build \
  --build-arg "GRAFANA_VERSION=latest" \
  --build-arg "GF_INSTALL_PLUGINS=alexanderzobnin-zabbix-app" \
  -t grafana-custom-zabbix .

# 使用docker run命令运行自定义Grafana容器
docker run -d -p 3000:3000 --name=grafana grafana-custom-zabbix  

这个自定义镜像基于最新的官方Grafana Docker镜像,并在构建时预装了zabbix插件。通过这种方式,当你运行该自定义镜像时,Grafana将在启动时自动加载zabbix插件,无需再手动安装。

运维系列.在Docker中使用Grafana(二):https://developer.aliyun.com/article/1580941

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
15天前
|
运维 开发者 Docker
Docker容器化技术在运维中的应用实践
【8月更文挑战第27天】本文旨在探讨Docker容器化技术如何在现代运维工作中发挥核心作用,通过深入浅出的方式介绍Docker的基本概念、优势以及实际应用场景。文章将结合具体案例,展示如何利用Docker简化部署流程、提高资源利用率和加强应用的可移植性。读者将获得对Docker容器技术在实际运维中应用的全面认识,并能够理解其在提升运维效率与质量方面的重要性。
|
1月前
|
应用服务中间件 网络安全 nginx
运维专题.Docker+Nginx服务器的SSL证书安装
运维专题.Docker+Nginx服务器的SSL证书安装
34 3
|
1月前
|
运维 监控 持续交付
构建高效自动化运维体系:Ansible与Docker的协同实践
【7月更文挑战第42天】 在当今快速发展的云计算和微服务架构时代,自动化运维已成为提升效率、确保系统稳定性的关键。本文将探讨如何利用Ansible这一强大的自动化工具与Docker容器技术相结合,搭建一个高效、可靠的自动化运维体系。文章首先简述了自动化运维的必要性和Ansible与Docker的基本概念,随后详细介绍了两者结合的优势,并通过实际案例分析展示了如何实现自动化部署、管理和扩展应用服务。通过阅读本文,读者将获得一套可行的自动化运维解决方案,以应对日益复杂的IT环境挑战。
|
1月前
|
运维 监控 数据可视化
"揭秘Docker管理神器Portainer:一键解锁Docker可视化管理新境界,让你的运维工作轻松又高效!"
【8月更文挑战第11天】Docker简化了应用部署与管理,但容器规模增大时,高效管理变得挑战重重。Portainer作为轻量级Docker管理工具,以直观界面和全面功能脱颖而出。它不仅简化了容器的创建、监控与操作,还涵盖了镜像、网络、卷管理及用户权限控制。Portainer易于部署,兼容单机与Swarm集群,降低学习门槛。本文深度剖析Portainer优势,并通过实例展示其实用性,使读者对其功能与价值有深刻理解。
43 3
|
1月前
|
存储 Linux 数据库
运维系列.在Docker中使用Grafana(二)
运维系列.在Docker中使用Grafana(二)
36 4
|
1月前
|
运维 Shell Linux
运维专题.Docker功能权限(Capabilities)管理和查看
运维专题.Docker功能权限(Capabilities)管理和查看
31 1
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
2月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
|
9天前
|
Ubuntu Linux pouch
Docker容器管理工具
文章介绍了Docker容器管理工具,以及早期使用的LXC容器管理工具,包括它们的安装、使用和相关技术特点。
38 10
Docker容器管理工具