【介绍】:本文介绍在Docker中使用Grafana的相关事项。
本文介绍通过官方Docker镜像安装Grafana。具体来说,它涵盖了通过Docker命令行界面(CLI)和docker-compose运行Grafana。
Grafana Docker镜像有两个版本:
Grafana Enterprise: grafana/grafana-enterprise
Grafana开源版: grafana/grafana-oss
推荐直接使用Grafana Enterprise默认版本。因为它是免费的,包含了所有OSS(开源)版本的功能。此外,还可以选择升级到完整的企业功能集,其中包括对企业插件的支持。
本节将展示如何使用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
默认情况下,Grafana使用嵌入式 SQLite3 数据库来存储配置、用户、仪表板和其他数据。当你将Docker镜像作为容器运行时,对这些Grafana数据的更改将写入容器内的文件系统,该文件系统只会在容器存在时持续存在。如果停止并删除容器,任何文件系统更改(即Grafana数据)都将被丢弃。为避免丢失数据,你可以使用 Docker卷 或绑定挂载为容器设置持久存储。
如果希望Docker引擎管理存储卷时,请使用Docker卷。要使用Docker卷进行持久存储,请完成以下步骤:
grafana-storage)。运行以下命令:docker volume create grafana-storage
如果计划在Docker中运行Grafana时将主机上的目录用于数据库或配置,则必须使用具有访问和写入映射目录权限的用户启动容器。
要使用绑定挂载,请运行以下命令:
mkdir data
docker run -d -p 3000:3000 --name=grafana \
--user "$(id -u)" \
--volume "$PWD/data:/var/lib/grafana" \
grafana/grafana-enterprise
就像使用MySQL官方镜像,使用Grafana也支持使用环境变量指定某些自定义配置设置。例如:
docker run -d -p 3000:3000 --name=grafana \
-e "GF_LOG_LEVEL=debug" \
grafana/grafana-enterprise
你可以从官方和社区插件页面或使用自定义URL安装Grafana中的插件以安装私有插件。这些插件允许你添加新的可视化类型、数据源和应用程序,以更好地可视化数据。
Grafana目前支持三种类型的插件:面板、数据源 和 应用程序。
要在Docker容器中安装插件,请完成以下步骤:
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
GF_INSTALL_PLUGINS环境变量。例如:docker run -d -p 3000:3000 --name=grafana \
-e "GF_INSTALL_PLUGINS=grafana-clock-panel 1.0.1" \
grafana/grafana-enterprise
着你如果你不指定版本号,将默认使用最新版本。
; 。例如: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
实际项目中,更加常用的不是通过命令,而是是使用Docker Compose来定义和共享由多个容器组成的应用程序。通过编写YAML文件(docker-compose.yaml),列出了组成应用程序的所有服务。然后可以使用单个命令以正确的顺序启动容器,并使用另一个命令关闭它们。
本节展示如何使用Docker Compose运行Grafana。本节中的示例使用Compose版本3。
要使用Docker Compose运行最新稳定版本的Grafana,请完成以下步骤:
创建一个docker-compose.yaml文件。
将以下代码添加到docker-compose.yaml文件中。例如:
version: "3.8"
services:
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: unless-stopped
ports:
- '3000:3000'
docker-compose.yaml,请运行以下命令:docker compose up -d
其中,d表示分离模式,up表示启动容器并运行。在Docker Compose中,要停止Grafana容器,需要使用down命令:
docker compose down
与之前类似,我们可以使用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
创建要挂载数据的目录,在本例中为当前工作目录中的/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卷从一个主机复制到另一个主机,或者使用分布式存储系统。而使用绑定挂载迁移数据只需要将主机上的目录复制到另一个主机的相同位置即可。
在某些情况下,你可能需要构建自己的Grafana Docker镜像。例如,你可能想要使用不同的基础镜像,更改日志记录级别,在云上定义秘密,或配置插件。本节将介绍如何构建自定义的Grafana Docker镜像。
Grafana官方提供的Docker镜像有两种变体:Alpine和Ubuntu。默认情况下,这些镜像是使用广泛使用的Alpine Linux项目基础镜像构建的。
Alpine Linux是一个独立的、非商业的通用Linux发行版,专为追求安全性、简单性和资源效率的用户而设计。与其他发行版的基础镜像相比,Alpine要小得多,从而可以创建更精简、更安全的镜像。
如果你重视安全性并希望最小化镜像的大小,建议使用Alpine变体。然而,重要的是要注意,Alpine变体使用musl libc而不是glibc和其他库。因此,某些软件可能会因其libc需求而遇到问题。尽管如此,大多数软件应该不会遇到任何问题,因此Alpine变体通常是可靠的。
目前市面上很多官方镜像都是基于Alpine,而不是Ubuntu、CentOS、等流行的发行版本的,主要也是因为Alpine镜像更小。
在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插件,无需再手动安装。
这个Dockerfile文件是grafana官方给出的,原地址为https://github.com/grafana/grafana/blob/main/packaging/docker/custom/Dockerfile,为方便内地读者,粘贴到此。
ARG GRAFANA_VERSION="latest"
FROM grafana/grafana:${GRAFANA_VERSION}
ARG GF_INSTALL_IMAGE_RENDERER_PLUGIN="false"
ARG GF_GID="0"
ENV GF_PATHS_PLUGINS="/var/lib/grafana-plugins"
ENV GF_PLUGIN_RENDERING_CHROME_BIN="/usr/bin/chrome"
USER root
RUN mkdir -p "$GF_PATHS_PLUGINS" && \
chown -R grafana:${GF_GID} "$GF_PATHS_PLUGINS" && \
if [ $GF_INSTALL_IMAGE_RENDERER_PLUGIN = "true" ]; then \
if grep -i -q alpine /etc/issue; then \
apk add --no-cache udev ttf-opensans chromium && \
ln -s /usr/bin/chromium-browser "$GF_PLUGIN_RENDERING_CHROME_BIN"; \
else \
cd /tmp && \
curl -sLO https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
DEBIAN_FRONTEND=noninteractive && \
apt-get update -q && \
apt-get install -q -y ./google-chrome-stable_current_amd64.deb && \
rm -rf /var/lib/apt/lists/* && \
rm ./google-chrome-stable_current_amd64.deb && \
ln -s /usr/bin/google-chrome "$GF_PLUGIN_RENDERING_CHROME_BIN"; \
fi \
fi
USER grafana
RUN if [ $GF_INSTALL_IMAGE_RENDERER_PLUGIN = "true" ]; then \
if grep -i -q alpine /etc/issue; then \
grafana-cli \
--pluginsDir "$GF_PATHS_PLUGINS" \
--pluginUrl https://github.com/grafana/grafana-image-renderer/releases/latest/download/plugin-alpine-x64-no-chromium.zip \
plugins install grafana-image-renderer; \
else \
grafana-cli \
--pluginsDir "$GF_PATHS_PLUGINS" \
--pluginUrl https://github.com/grafana/grafana-image-renderer/releases/latest/download/plugin-linux-x64-glibc-no-chromium.zip \
plugins install grafana-image-renderer; \
fi \
fi
ARG GF_INSTALL_PLUGINS=""
RUN if [ ! -z "${GF_INSTALL_PLUGINS}" ]; then \
OLDIFS=$IFS; \
IFS=','; \
set -e ; \
for plugin in ${GF_INSTALL_PLUGINS}; do \
IFS=$OLDIFS; \
if expr match "$plugin" '.*\;.*'; then \
pluginUrl=$(echo "$plugin" | cut -d';' -f 1); \
pluginInstallFolder=$(echo "$plugin" | cut -d';' -f 2); \
grafana-cli --pluginUrl ${pluginUrl} --pluginsDir "${GF_PATHS_PLUGINS}" plugins install "${pluginInstallFolder}"; \
else \
grafana-cli --pluginsDir "${GF_PATHS_PLUGINS}" plugins install ${plugin}; \
fi \
done \
fi
Ubuntu和Debian(64位)的SHA256:42c576ba4e5fad6ddbc68301a983f28e459256498eb655b4229a5ce660d1f70a
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.0.0_amd64.deb
sudo dpkg -i grafana-enterprise_11.0.0_amd64.deb
阅读Ubuntu / Debian 安装指南 获取更多信息。我们还提供一个 APT 软件包存储库。
独立的Linux二进制文件(64位)的SHA256:6b80cd453bf834d17106817e23b481b9c8c303ce75670e03e279e2231b1a12ba
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-11.0.0.linux-amd64.tar.gz
Red Hat、CentOS、RHEL和Fedora(64位)的SHA256:26964ac20e6dd0c3c89850e6e3e3e8200200e6b18f0a1523c5f79b7079d66b39
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.x86_64.rpm
阅读Red Hat和Fedora的 安装指南 获取更多信息。我们还提供一个 YUM 软件包存储库。
OpenSUSE和SUSE(64位)的SHA256:26964ac20e6dd0c3c89850e6e3e3e8200200e6b18f0a1523c5f79b7079d66b39
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.x86_64.rpm
sudo rpm -Uvh grafana-enterprise-11.0.0-1.x86_64.rpm
还有一个 YUM / zypper 软件包存储库。
Windows安装程序(64位)的SHA256:f34e9ed5ef1bad2ee08784602f86d6539ae97d72bd163896240b9a29c3b4e83a
下载安装程序(grafana-enterprise-11.0.0.windows-amd64.msi)并运行它。
独立的Windows二进制文件(64位)的SHA256:ac5c7089057533d531dad8c7d30bc5b45ce65c03a7b39c699bc975bb604eb788
下载zip文件(grafana-enterprise-11.0.0.windows-amd64.zip)并按照下面安装指南中的说明进行操作。
阅读Windows 安装指南。
这段文本是关于Grafana的安装指南和一些命令行操作的说明。它的翻译大致如下:
独立的 MacOS/Darwin 二进制文件(64 位)SHA256: 7c3ad3255b06574032c1ed28ab110ecbcf8875d82b9af698fe166f49706ffe28
阅读 MacOS 安装指南 以获取更多信息。
curl -O https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0.darwin-amd64.tar.gz
tar -zxvf grafana-enterprise-11.0.0.darwin-amd64.tar.gz
Ubuntu 和 Debian(ARM64)SHA256:3d9ee819cda2484597f5d48857beaa666089933a87652088f0668458b6f7a92b
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.0.0_arm64.deb
sudo dpkg -i grafana-enterprise_11.0.0_arm64.deb
独立的 Linux 二进制文件(ARM64)SHA256:50d20c6ee3eb5c7c4fbadba21ea7367ca88e490d33a73a893664b56c84b0b0d3
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0.linux-arm64.tar.gz
tar -zxvf grafana-enterprise-11.0.0.linux-arm64.tar.gz
Red Hat、CentOS、RHEL 和 Fedora(ARM64)SHA256:ad6a0c5350f35fc989c22bf7fcf80f8657672e035c10e2817482f4cac5f6bac6
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.aarch64.rpm
OpenSUSE 和 SUSE(ARM64)SHA256:ad6a0c5350f35fc989c22bf7fcf80f8657672e035c10e2817482f4cac5f6bac6
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.aarch64.rpm
sudo rpm -Uvh grafana-enterprise-11.0.0-1.aarch64.rpm
在使用Docker容器运行Grafana时,defaults.ini文件通常位于容器内的/etc/grafana目录下。一般具体路径为:/etc/grafana/grafana.ini。
Grafana的defaults.ini文件列出了所有默认配置项及其说明。你也可以在Grafana的GitHub仓库中找到这个文件:https://github.com/grafana/grafana/blob/main/conf/defaults.ini
##################### Grafana Configuration Defaults #####################
#
# 不要修改此文件在Grafana安装中
#
# 可选值: production, development
app_mode = production
# 实例名称,默认取值为HOSTNAME环境变量值或hostname(如果HOSTNAME变量为空)
instance_name = ${HOSTNAME}
#################################### Paths ###############################
[paths]
# Grafana存储临时文件、会话和sqlite3数据库的路径(如果使用sqlite3数据库)
data = data
# 删除`data`目录中超过给定持续时间的临时文件
temp_data_lifetime = 24h
# Grafana存储日志的目录
logs = data/log
# Grafana自动扫描并查找插件的目录
plugins = data/plugins
# 包含Grafana在启动和运行时应用的配置文件的文件夹
provisioning = conf/provisioning
#################################### Server ##############################
[server]
# 协议 (http, https, h2, socket)
protocol = http
# 允许的最小TLS版本。默认此值为空。接受的值:TLS1.2, TLS1.3。如果未设置,则默认使用TLS1.2
min_tls_version = ""
# 绑定的IP地址,留空将绑定到所有接口
http_addr =
# 使用的HTTP端口
http_port = 3000
# 从浏览器访问Grafana时使用的公开域名
domain = localhost
# 如果主机头与域名不匹配,则重定向到正确的域名
# 防止DNS重绑定攻击
enforce_domain = false
# 完整的公开URL
root_url = %(protocol)s://%(domain)s:%(http_port)s/
# 是否从`root_url`设置指定的子路径提供Grafana服务。默认情况下为了兼容性设置为`false`
serve_from_sub_path = false
# 记录Web请求
router_logging = false
# 相对工作路径的路径
static_root_path = public
# 启用gzip
enable_gzip = false
# HTTPS证书和密钥文件
cert_file =
cert_key =
# 证书文件监控间隔
certs_watch_interval =
# Unix套接字gid
# 更改文件的gid需要目标组在进程的组中且进程是文件所有者
# 建议将gid设置为HTTP服务器用户gid
# 如果值为-1则不设置
socket_gid = -1
# Unix套接字模式
socket_mode = 0660
# Unix套接字路径
socket = /tmp/grafana.sock
# CDN URL
cdn_url =
# 在关闭空闲连接之前读取传入请求的最大时间(分钟)。
# `0`表示读取请求没有超时
read_timeout = 0
# 此设置允许您指定服务器添加到HTTP(S)响应的附加头
[server.custom_response_headers]
#exampleHeader1 = exampleValue1
#exampleHeader2 = exampleValue2
[environment]
# 设置本地文件系统是否可供Grafana使用。默认为true以保持向后兼容
local_file_system_available = true
#################################### GRPC Server #########################
[grpc_server]
network = "tcp"
address = "127.0.0.1:10000"
use_tls = false
cert_file =
key_file =
# 记录每个一元gRPC调用的请求和响应
enable_logging = false
# 可以接收的最大消息大小(字节)。如果未设置,则使用gRPC默认值(4MiB)
max_recv_msg_size =
# 可以发送的最大消息大小(字节)。如果未设置,则使用gRPC默认值(无限制)
max_send_msg_size =
#################################### Database ############################
[database]
# 可以通过分别指定类型、主机、名称、用户和密码来配置数据库连接
# 也可以使用url属性将其作为一个字符串指定
# 选择 "mysql", "postgres" 或 "sqlite3"
type = sqlite3
host = 127.0.0.1:3306
name = grafana
user = root
# 如果密码包含 # 或 ; 则必须用三重引号括起来。 例如 """#password;"""
password =
# 使用URL或前面的字段配置数据库
# 例如: mysql://user:secret@host:port/database
url =
# 最大空闲连接数,默认为2
max_idle_conn = 2
# 最大连接数,默认为0(表示未设置)
max_open_conn =
# 连接的最大生命周期,默认是14400秒(4小时)
conn_max_lifetime = 14400
# 设置为true以记录SQL调用和执行时间
log_queries =
# 对于 "postgres",使用 "disable", "require" 或 "verify-full"
# 对于 "mysql",使用 "true", "false", 或 "skip-verify"
ssl_mode = disable
# 对于 "postgres",使用 "1" 启用或 "0" 禁用SNI
ssl_sni =
# 数据库驱动程序可能支持不同的事务隔离级别。
# 目前,仅 "mysql" 驱动程序支持隔离级别。
# 如果值为空 - 应用驱动程序的默认隔离级别。
# 对于 "mysql" 使用 "READ-UNCOMMITTED", "READ-COMMITTED", "REPEATABLE-READ" 或 "SERIALIZABLE"
isolation_level =
ca_cert_path =
client_key_path =
client_cert_path =
server_cert_name =
# 仅对于 "sqlite3",相对于data_path设置的路径
path = grafana.db
# 仅对于 "sqlite3"。连接数据库时使用的缓存模式设置
cache_mode = private
# 仅对于 "sqlite3"。启用/禁用预写日志,https://sqlite.org/wal.html。默认值为false。
wal = false
# 对于 "mysql" 和 "postgres"。锁定数据库以进行迁移,默认值为true
migration_locking = true
# 仅当migrationLocking设置时适用于 "mysql" 和 "postgres"。在未能锁定数据库以进行迁移之前等待的秒数,默认值为0
locking_attempt_timeout_sec = 0
# 仅适用于 "sqlite"。在数据库锁定失败的情况下重试查询的次数。默认值为0(禁用)。
query_retries = 0
# 仅适用于 "sqlite"。在数据库锁定失败的情况下重试事务的次数。默认值为5
transaction_retries = 5
# 设置为true以为数据库查询添加指标和追踪
instrument_queries = false
#################################### 缓存服务器 #############################
[remote_cache]
# 可以是 "redis", "memcached" 或 "database",默认是 "database"
type = database
# 缓存连接字符串选项
# database: 将使用 Grafana 主数据库。
# redis: 配置类似 redis 服务器,例如 `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`。只有 addr 是必需的。ssl 可以是 'true', 'false' 或 'insecure'。
# memcache: 127.0.0.1:11211
connstr =
# 前缀,添加到远程缓存的所有键前
prefix =
# 启用存储在远程缓存中的值的加密
encryption =
#################################### 数据代理 ###########################
[dataproxy]
# 启用数据代理日志记录,默认是 false
logging = false
# 数据代理在超时前等待读取响应头的时间,默认是 30 秒。
# 此设置也适用于核心后端 HTTP 数据源,其中查询请求使用设置了超时的 HTTP 客户端。
timeout = 30
# 数据代理在超时前等待建立 TCP 连接的时间,默认是 10 秒。
dialTimeout = 10
# 数据代理在发送 keepalive 请求前等待的秒数。
keep_alive_seconds = 30
# 数据代理在超时前等待成功的 TLS 握手的秒数。
tls_handshake_timeout_seconds = 10
# 在完全写入请求头后,数据代理在超时前等待服务器的第一个响应头的秒数(如果请求有 "Expect: 100-continue" 头)。值为 0 将导致立即发送主体,而无需等待服务器批准。
expect_continue_timeout_seconds = 1
# 可选地限制每个主机的总连接数,包括拨号、活动和空闲状态下的连接。达到限制时,拨号将阻塞。
# 值为零(0)表示无限制。
max_conns_per_host = 0
# Grafana 将保持的最大空闲连接数。
max_idle_connections = 100
# 数据代理在超时前保持空闲连接打开的秒数。
idle_conn_timeout_seconds = 90
# 如果启用且用户不是匿名的,数据代理将在请求中添加 X-Grafana-User 头,其中包含用户名。
send_user_header = false
# 限制从传出的 HTTP 请求响应中读取/接受的字节数。
response_limit = 0
# 限制 Grafana 将处理的来自 SQL 数据源的行数。
row_limit = 1000000
# 设置用于传出的数据代理请求的 `User-Agent` 头的自定义值。如果为空,默认值为 `Grafana/`(例如 `Grafana/9.0.0`)。
user_agent =
#################################### 分析 ###########################
[analytics]
# 服务器报告,每 24 小时向 stats.grafana.org 发送使用计数。
# 没有跟踪 IP 地址,只是简单的计数器,用于跟踪
# 运行实例、仪表板和错误计数。对我们非常有帮助。
# 将此选项更改为 false 可禁用报告。
reporting_enabled = true
# Grafana 实例的分发者名称。例如 hosted-grafana, grafana-labs
reporting_distributor = grafana-labs
# 设置为 false 以禁用所有对 https://grafana.com 的检查
# 用于获取 grafana 新版本。此检查用于
# 在某些 UI 视图中通知 grafana 更新存在。
# 此选项不会导致任何自动更新,也不会发送任何信息
# 只会向 https://grafana.com/api/grafana/versions/stable 发送一个 GET 请求以获取最新版本。
check_for_updates = true
# 设置为 false 以禁用所有对 https://grafana.com 的检查
# 用于获取插件的新版本。此检查用于
# 在某些 UI 视图中通知插件更新存在。
# 此选项不会导致任何自动更新,也不会发送任何信息
# 只会向 https://grafana.com 发送一个 GET 请求以获取最新版本。
check_for_plugin_updates = true
# Google Analytics 通用跟踪代码,只有在此处指定 id 时才启用
google_analytics_ua_id =
# Google Analytics 4 跟踪代码,只有在此处指定 id 时才启用
google_analytics_4_id =
# 启用 Google Analytics 4 增强事件测量时,我们将尝试避免发送重复事件,并让 Google Analytics 4 检测导航更改等。
google_analytics_4_send_manual_page_views = false
# Google Tag Manager ID,只有在此处指定 id 时才启用
google_tag_manager_id =
# Rudderstack 写密钥,仅在 rudderstack_data_plane_url 也设置时启用
rudderstack_write_key =
# Rudderstack 数据平面 URL,仅在 rudderstack_write_key 也设置时启用
rudderstack_data_plane_url =
# Rudderstack SDK URL,可选,仅在 rudderstack_write_key 和 rudderstack_data_plane_url 也设置时有效
rudderstack_sdk_url =
# Rudderstack 配置 URL,可选,用于 Rudderstack SDK 获取源配置
rudderstack_config_url =
# Rudderstack 集成 URL,可选。仅在传递 SDK 版本 1.1 或更高版本时有效
rudderstack_integrations_url =
# Intercom 秘密,可选,用于在通过 Rudderstack 传递给 Intercom 之前对 user_id 进行哈希处理
intercom_secret =
# Application Insights 连接字符串。指定一个 URL 字符串以启用此功能。
application_insights_connection_string =
# 可选。指定一个 Application Insights 端点 URL,其中端点字符串用反引号 ` 包含。
application_insights_endpoint_url =
# 控制 UI 是否包含任何用户反馈表单的链接
feedback_links_enabled = true
#################################### 安全性 ############################
[security]
# 禁用首次启动 grafana 时创建管理员用户
disable_initial_admin_creation = false
# 默认管理员用户,启动时创建
admin_user = admin
# 默认管理员密码,可以在首次启动 grafana 之前或在个人资料设置中更改
admin_password = admin
# 默认管理员电子邮件,启动时创建
admin_email = admin@localhost
# 用于签名
secret_key = SW2YcwTIb9zpOOhoPsMm
# 当前用于信封加密的密钥提供者,默认为 secret_key 指定的静态值
encryption_provider = secretKey.v1
# 配置的密钥提供者列表,空格分隔(仅限企业版):例如 awskms.v1 azurekv.v1
available_encryption_providers =
# 禁用 gravatar 个人资料图片
disable_gravatar = false
# 数据源代理白名单(ip_or_domain:port,用空格分隔)
data_source_proxy_whitelist =
# 禁用针对暴力登录尝试的保护
disable_brute_force_login_protection = false
# 如果您在 HTTPS 后面托管 Grafana,请设置为 true。默认是 false。
cookie_secure = false
# 设置 cookie SameSite 属性。默认值为 `lax`。可以设置为 "lax", "strict", "none" 和 "disabled"
cookie_samesite = lax
# 如果您希望允许浏览器在 ,
这部分来源于官方文档,提供了一个Docker使用环境变量来覆盖配置文件ini的方法。地址:
https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/
不要使用环境变量来 添加 新的配置设置。相反,使用环境变量来 覆盖 现有选项。
要覆盖选项:
GF_<SectionName>_<KeyName>
其中,部分名称是方括号内的文本。所有内容都应大写,. 和 - 应替换为 _。例如,如果您有以下配置设置:
# 默认部分
instance_name = ${HOSTNAME}
[security]
admin_user = admin
[auth.google]
client_secret = 0ldS3cretKey
[plugin.grafana-image-renderer]
rendering_ignore_https_errors = true
[feature_toggles]
enable = newNavigation
您可以在 Linux 机器上使用以下命令覆盖变量:
export GF_DEFAULT_INSTANCE_NAME=my-instance
export GF_SECURITY_ADMIN_USER=owner
export GF_AUTH_GOOGLE_CLIENT_SECRET=newS3cretKey
export GF_PLUGIN_GRAFANA_IMAGE_RENDERER_RENDERING_IGNORE_HTTPS_ERRORS=true
export GF_FEATURE_TOGGLES_ENABLE=newNavigation
参考此ini文件,毕竟这些数据都是可配置的,Grafana对应可能有以下环境变量(仅做参考不确定是否都有),感兴趣试试:
| 环境变量 | 功能描述 |
|---|---|
| GF_AUTH_GOOGLE_CLIENT_SECRET | 用于配置Google OAuth的客户端密钥 |
| GF_DEFAULT_INSTANCE_NAME | 设置Grafana实例的默认名称 |
| GF_PATHS_CONFIG | 设置Grafana配置文件的路径,默认为/etc/grafana/grafana.ini |
| GF_PATHS_DATA | 设置Grafana数据目录的路径,默认为/var/lib/grafana |
| GF_PATHS_HOME | 设置Grafana安装目录的路径,默认为/usr/share/grafana |
| GF_PATHS_LOGS | 设置Grafana日志目录的路径,默认为/var/log/grafana |
| GF_PATHS_PLUGINS | 设置Grafana插件目录的路径,默认为/var/lib/grafana/plugins |
| GF_PLUGIN_GRAFANA_IMAGE_RENDERER_RENDERING_IGNORE_HTTPS_ERRORS | 用于配置Grafana Image Renderer插件,忽略HTTPS错误 |
| GF_PATHS_PROVISIONING | 设置Grafana预配置目录的路径,默认为/etc/grafana/provisioning |
| GF_INSTALL_PLUGINS | 在启动时安装指定的Grafana插件,多个插件用逗号分隔 |
| GF_INSTALL_IMAGE_RENDERER_PLUGIN | 在启动时安装Grafana Image Renderer插件 |
| GF_SECURITY_ADMIN_USER | 设置Grafana管理员用户名 |
| GF_SECURITY_ADMIN_PASSWORD | 设置Grafana管理员密码 |
| GF_SECURITY_ADMIN_PASSWORDFILE | 从文件中读取Grafana管理员密码 |
| GF_SECURITY_SECRET_KEY | 设置Grafana的密钥,用于签名 |
| GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION | 禁用初始管理员用户的创建 |
| GF_USERS_ALLOW_SIGN_UP | 允许用户自行注册 |
| GF_USERS_ALLOW_ORG_CREATE | 允许用户创建组织 |
| GF_USERS_AUTO_ASSIGN_ORG | 自动将用户添加到默认组织 |
| GF_USERS_AUTO_ASSIGN_ORG_ROLE | 自动分配用户在组织中的角色 |
| GF_AUTH_ANONYMOUS_ENABLED | 启用匿名访问 |
| GF_AUTH_ANONYMOUS_ORG_NAME | 设置匿名用户所属的组织名称 |
| GF_AUTH_ANONYMOUS_ORG_ROLE | 设置匿名用户在组织中的角色 |
| GF_AUTH_BASIC_ENABLED | 启用基本认证 |
| GF_AUTH_LDAP_ENABLED | 启用LDAP认证 |
| GF_AUTH_LDAP_CONFIG_FILE | 设置LDAP配置文件的路径 |
| GF_ANALYTICS_REPORTING_ENABLED | 启用使用情况报告 |
| GF_ANALYTICS_CHECK_FOR_UPDATES | 启用版本更新检查 |
| GF_DASHBOARDS_JSON_ENABLED | 启用仪表板的JSON导入导出 |
| GF_DASHBOARDS_JSON_PATH | 设置仪表板JSON文件的路径 |
| GF_SMTP_ENABLED | 启用SMTP服务 |
| GF_SMTP_HOST | 设置SMTP服务器主机 |
| GF_SMTP_USER | 设置SMTP服务器用户名 |
| GF_SMTP_PASSWORD | 设置SMTP服务器密码 |
| GF_SMTP_FROM_ADDRESS | 设置SMTP发件人地址 |
| GF_SMTP_FROM_NAME | 设置SMTP发件人名称 |
| GF_LOG_MODE | 设置日志模式,可选值为console, file, syslog |
| GF_LOG_LEVEL | 设置日志级别,可选值为debug, info, warn, error, critical |
| GF_LOG_FILTERS | 设置日志过滤器 |
| GF_METRICS_ENABLED | 启用Grafana指标收集 |
| GF_METRICS_BASIC_AUTH_USERNAME | 设置指标端点的基本认证用户名 |
| GF_METRICS_BASIC_AUTH_PASSWORD | 设置指标端点的基本认证密码 |
| GF_METRICS_INTERVAL_SECONDS | 设置指标收集的间隔时间(秒) |
| GF_SNAPSHOTS_EXTERNAL_ENABLED | 启用外部快照功能 |
| GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_URL | 设置外部快照的URL |
| GF_SNAPSHOTS_EXTERNAL_SNAPSHOT_NAME | 设置外部快照的名称 |
| GF_EXTERNAL_IMAGE_STORAGE_PROVIDER | 设置外部图像存储提供商 |
| GF_EXTERNAL_IMAGE_STORAGE_S3_BUCKET | 设置S3图像存储的存储桶名称 |
| GF_EXTERNAL_IMAGE_STORAGE_S3_REGION | 设置S3图像存储的区域 |
| GF_EXTERNAL_IMAGE_STORAGE_S3_PATH | 设置S3图像存储的路径前缀 |
| GF_EXTERNAL_IMAGE_STORAGE_S3_ACCESS_KEY | 设置S3图像存储的访问密钥 |
| GF_EXTERNAL_IMAGE_STORAGE_S3_SECRET_KEY | 设置S3图像存储的密钥 |
| GF_PANELS_DISABLE_SANITIZE_HTML | 禁用面板中HTML的净化 |
| GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS | 允许加载未签名的插件 |
| GF_PLUGINS_ENABLE_ALPHA | 启用alpha版本的插件 |
| GF_DATAPROXY_TIMEOUT | 设置数据代理的超时时间 |
| GF_DATAPROXY_SEND_USER_HEADER | 在数据代理请求中发送用户头信息 |
| GF_SERVER_ENABLE_GZIP | 启用Gzip压缩 |
| GF_SERVER_CERT_FILE | 设置服务器证书文件路径 |
| GF_SERVER_CERT_KEY | 设置服务器证书密钥文件路径 |
| GF_DATABASE_TYPE | 设置数据库类型,可选值为mysql, postgres, sqlite3 |
| GF_DATABASE_HOST | 设置数据库主机 |
| GF_DATABASE_NAME | 设置数据库名称 |
| GF_DATABASE_USER | 设置数据库用户名 |
| GF_DATABASE_PASSWORD | 设置数据库密码 |
| GF_DATABASE_SSL_MODE | 设置数据库SSL模式 |
| GF_DATABASE_MAX_OPEN_CONN | 设置数据库最大打开连接数 |
| GF_DATABASE_MAX_IDLE_CONN | 设置数据库最大空闲连接数 |
| GF_DATABASE_CONN_MAX_LIFETIME | 设置数据库连接的最大生命周期 |
| GF_SESSION_PROVIDER | 设置会话提供商,可选值为file, mysql, postgres, memcache, redis |
| GF_SESSION_PROVIDER_CONFIG | 设置会话提供商的配置 |
| GF_SESSION_COOKIE_NAME | 设置会话cookie的名称 |
| GF_SESSION_COOKIE_SECURE | 启用安全的会话cookie |
| GF_SESSION_COOKIE_SAMESITE | 设置会话cookie的SameSite属性 |
| GF_LOG_CONSOLE_FORMAT | 设置控制台日志格式,可选值为console, json, text |
| GF_LOG_CONSOLE_LEVEL | 设置控制台日志级别 |
| GF_LOG_FILE_FORMAT | 设置文件日志格式,可选值为text, json |
| GF_LOG_FILE_LEVEL | 设置文件日志级别 |
| GF_LOG_FILE_LOG_ROTATE | 启用文件日志轮转 |
| GF_LOG_FILE_MAX_LINES | 设置文件日志的最大行数 |
| GF_LOG_FILE_MAX_SIZE_SHIFT | 设置文件日志的最大大小(以位移表示) |
| GF_LOG_FILE_DAILY_ROTATE | 启用文件日志的每日轮转 |
| GF_LOG_FILE_MAX_DAYS | 设置文件日志的最大保留天数 |
| GF_LOG_SYSLOG_FORMAT | 设置syslog日志格式,可选值为text, json |
| GF_LOG_SYSLOG_LEVEL | 设置syslog日志级别 |
| GF_LOG_SYSLOG_NETWORK | 设置syslog日志的网络协议,可选值为tcp, udp |
| GF_LOG_SYSLOG_ADDRESS | 设置syslog日志的地址 |
| GF_LOG_SYSLOG_FACILITY | 设置syslog日志的设施 |
| GF_LOG_SYSLOG_TAG | 设置syslog日志的标签 |
| GF_ALERTING_ENABLED | 启用警报功能 |
| GF_ALERTING_EXECUTE_ALERTS | 启用警报执行 |
| GF_ALERTING_ERROR_OR_TIMEOUT | 设置警报的错误或超时时间 |
| GF_ALERTING_NODATA_OR_NULLVALUES | 设置警报的无数据或空值行为 |
| GF_ALERTING_CONCURRENT_RENDER_LIMIT | 设置警报的并发渲染限制 |
| GF_ALERTING_EVALUATION_TIMEOUT_SECONDS | 设置警报的评估超时时间(秒) |
| GF_ALERTING_NOTIFICATION_TIMEOUT_SECONDS | 设置警报的通知超时时间(秒) |
| GF_ALERTING_MAX_ATTEMPTS | 设置警报的最大尝试次数 |
| GF_EXPLORE_ENABLED | 启用探索功能 |
| GF_TRACING_ENABLED | 启用跟踪功能 |
| GF_TRACING_JAEGER_AGENT_HOST | 设置Jaeger代理的主机 |
| GF_TRACING_JAEGER_AGENT_PORT | 设置Jaeger代理的端口 |
| GF_TRACING_JAEGER_SAMPLER_TYPE | 设置Jaeger采样器的类型 |
| GF_TRACING_JAEGER_SAMPLER_PARAM | 设置Jaeger采样器的参数 |
| GF_TRACING_JAEGER_SAMPLER_MAX_OPERATIONS | 设置Jaeger采样器的最大操作数 |
| GF_TRACING_JAEGER_SAMPLER_REFRESH_INTERVAL | 设置Jaeger采样器的刷新间隔 |
| GF_TRACING_JAEGER_REPORTER_MAX_QUEUE_SIZE | 设置Jaeger报告器的最大队列大小 |
| GF_TRACING_JAEGER_REPORTER_FLUSH_INTERVAL | 设置Jaeger报告器的刷新间隔 |
| GF_TRACING_JAEGER_REPORTER_LOG_SPANS | 启用Jaeger报告器的日志跨度 |
| GF_TRACING_JAEGER_REPORTER_LOCAL_AGENT_HOST_PORT | 设置Jaeger报告器的本地代理主机和端口 |
| GF_TRACING_JAEGER_REPORTER_ENDPOINT | 设置Jaeger报告器的端点 |
| GF_TRACING_JAEGER_REPORTER_USER | 设置Jaeger报告器的用户名 |
| GF_TRACING_JAEGER_REPORTER_PASSWORD | 设置Jaeger报告器的密码 |
| GF_TRACING_JAEGER_TAGS | 设置Jaeger的标签 |
| GF_TRACING_JAEGER_PROPAGATION | 设置Jaeger的传播格式 |
| GF_TRACING_JAEGER_DISABLED | 禁用Jaeger跟踪 |
| GF_TRACING_JAEGER_REPORTER_QUEUE_SIZE | 设置Jaeger报告器的队列大小 |
| GF_TRACING_JAEGER_REPORTER_BUFFER_FLUSH_INTERVAL | 设置Jaeger报告器的缓冲区刷新间隔 |
| GF_TRACING_JAEGER_SAMPLER_MANAGER_HOST_PORT | 设置Jaeger采样器管理器的主机和端口 |
| GF_TRACING_JAEGER_SAMPLER_MIN_PERC | 设置Jaeger采样器的最小百分比 |
| GF_TRACING_JAEGER_REPORTER_FLUSH_INTERVAL_MS | 设置Jaeger报告器的刷新间隔(毫秒) |
| GF_TRACING_JAEGER_REPORTER_MAX_PACKET_SIZE | 设置Jaeger报告器的最大数据包大小 |
| GF_TRACING_JAEGER_REPORTER_MAX_BACKLOG | 设置Jaeger报告器的最大积压量 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_PATH_ROOT | 设置Jaeger报告器的收集器路径根 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_PORT | 设置Jaeger报告器的收集器端口 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_HTTP_PATH | 设置Jaeger报告器的Zipkin HTTP路径 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_HTTP_PATH | 设置Jaeger报告器的Zipkin HTTP路径 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_TAGS_HEADER | 设置Jaeger报告器的Zipkin标签头 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_SHARED_RPC_SPAN | 设置Jaeger报告器的Zipkin共享RPC跨度 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_PROTO_COMPACT | 设置Jaeger报告器的Zipkin紧凑型协议 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_TIMEOUT | 设置Jaeger报告器的Zipkin超时时间 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_BATCH_SIZE | 设置Jaeger报告器的Zipkin批次大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_MAX_BACKLOG | 设置Jaeger报告器的Zipkin最大积压量 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_QUEUE_SIZE | 设置Jaeger报告器的Zipkin队列大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_BUFFER_FLUSH_INTERVAL | 设置Jaeger报告器的Zipkin缓冲区刷新间隔 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_FLUSH_INTERVAL | 设置Jaeger报告器的Zipkin IO刷新间隔 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_SIZE | 设置Jaeger报告器的Zipkin IO批次大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_MAX_BACKLOG | 设置Jaeger报告器的Zipkin IO最大积压量 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_QUEUE_SIZE | 设置Jaeger报告器的Zipkin IO队列大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BUFFER_FLUSH_INTERVAL | 设置Jaeger报告器的Zipkin IO缓冲区刷新间隔 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_WRITE_TIMEOUT | 设置Jaeger报告器的Zipkin IO写入超时时间 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_DISPATCH_TIMEOUT | 设置Jaeger报告器的Zipkin IO调度超时时间 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_TIMEOUT | 设置Jaeger报告器的Zipkin IO批次超时时间 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_WORKERS | 设置Jaeger报告器的Zipkin IO批次工作线程数 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_SIZE | 设置Jaeger报告器的Zipkin IO批次队列大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_OVERFLOW | 设置Jaeger报告器的Zipkin IO批次队列溢出策略 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_BATCH_SIZE | 设置Jaeger报告器的Zipkin IO批次队列批次大小 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_BATCH_TIMEOUT | 设置Jaeger报告器的Zipkin IO批次队列批次超时时间 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_WORKERS | 设置Jaeger报告器的Zipkin IO批次队列工作线程数 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_MAX_BACKLOG | 设置Jaeger报告器的Zipkin IO批次队列最大积压量 |
| GF_TRACING_JAEGER_REPORTER_COLLECTOR_ZIPKIN_IO_BATCH_QUEUE_BATCH_WORKERS | 设置Jaeger报告器的Zipkin IO批次队列批次工作线程数 |
| GF_FEATURE_TOGGLES_ENABLE | 覆盖配置文件中[feature_toggles]部分的enable设置。这允许你启用或禁用Grafana中的特定功能 |