使用 Kubernetes + Grafana Loki + Promtail 进行任意虚拟机的日志收集
为了达到某个预期的结果或完成某个任务所制定的计划或行动。
システムを安定稼働させるためにログの監視は重要な項目である。
ログを収集することでシステムトラブルや不審な操作・動作の検知に役立ち、その解決の一助とできる。
今回は前回記事である Loki + NFS で Kubernetes 上のログ取得 の続きとして、任意の VM に Promtail をインストールし、VM のログも収集可能にする。
在保存日志时,使用NFS服务器。
虽然Loki不推荐使用NFS服务器作为保存位置,但为了验证Loki在包括Kubernetes在内的所有本地环境中的运行情况,仍可以使用NFS服务器。
- 第 1 章: Loki + NFS で Kubernetes 上のログ取得
使用NFS作为卷,并安装Loki。
- 第 2 章: この章
安装Promtail,并将其聚合到最新安装的Loki中。
构成
使用3台Linux机器(Ubuntu 20.04),构建了以下配置的Kubernetes集群。
在Kubernetes上已经部署了Prometheus + Grafana + Loki。
此外,还准备了一台Linux机器(Ubuntu 20.04)用作NFS服务器和用于日志收集的任意虚拟机。
-
- Kubernetes (Master Node)
10.100.2.220
Kubernetes (Worker Node)
10.100.2.221
10.100.2.222
NFS サーバ
10.100.2.170
ログ収集用の任意の VM
10.100.3.10
操作步骤 xù)
安装Helm
-
- 実行場所
Kubernetes (Master Node)
安装Kubernetes的软件包管理工具Helm。
手順は 第 1 章: Loki + NFS で Kubernetes 上のログ取得 で記載しているため、省略する。
Promtail 是一款日志收集系统。
-
- 実行場所
Kubernetes (Master Node)
Loki支持的用于日志收集的客户端软件包括Docker Driver、Fluentd和Logstash等。我们将在本次中选择引入Promtail。Promtail可以在与其运行的节点相同的节点上从运行的Pod中自动收集日志。因此,它是在运行Kubernetes时的最佳客户端。此外,Promtail还可以配置为从指定的主机路径追踪所有文件的日志,因此也是在裸金属上的最佳客户端。
为了在Kubernetes和任意的虚拟机上收集日志,我们将引入Promtail。
添加 Helm 存储库
添加 Helm 存储库。
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
创建配置文件
创建在启动时使用的Promtail配置文件。
cat << _EOF_ > loki-values-promtail.yaml
extraPorts:
syslog:
name: tcp-syslog
containerPort: 31002
service:
port: 31002
type: NodePort
nodePort: 31002
config:
snippets:
extraScrapeConfigs: |
- job_name: syslog
syslog:
listen_address: 0.0.0.0:31002
listen_protocol: tcp
idle_timeout: 60s
label_structured_data: yes
labels:
job: syslog
relabel_configs:
- source_labels:
- __syslog_message_hostname
target_label: host
_EOF_
安装
安装Promtail时,请使用–namespace选项来指定与Prometheus + Grafana + Loki正在运行的命名空间相同的命名空间。
helm install --namespace monitoring --values loki-values-promtail.yaml promtail grafana/promtail
确认。
$ kubectl get all -n monitoring | grep promtail
pod/promtail-mjrjt 1/1 Running 0 76m
pod/promtail-t4jn4 1/1 Running 0 76m
service/promtail-syslog NodePort 10.99.220.27 <none> 31002:31002/TCP 76m
daemonset.apps/promtail 2 2 2 2 2 <none> 76m
日志收集
-
- 実行場所
ログ収集用の任意の VM
将运行在虚拟机上的syslog文件传送到Loki中。
Promtail 安装
根据需要,从与Loki相同的位置获取Promtail二进制文件,并进行必要的版本更改。
wget https://github.com/grafana/loki/releases/download/v2.8.0/promtail-linux-amd64.zip
mkdir -p /opt/promtail
unzip promtail-linux-amd64.zip
mv promtail-linux-amd64 /opt/promtail
创建配置文件
创建Promtail的配置文件。
在clients.url中指定连接到Loki的URL。
这次在Kubernetes + Grafana Loki + NFS安装的Loki安装时,已经设置了gateway.serivce并打开了31001端口作为NodePort,因此指定为10.100.2.220:31001。
在scrape_configs内的labels中,指定在Grafana等工具中用于确认使用的标签和要收集的文件。
$ cat << _EOF_ > /opt/promtail/promtail-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
grpc_server_max_recv_msg_size: 15728640
grpc_server_max_send_msg_size: 15728640
positions:
filename: /opt/promtail/positions.yaml
clients:
- url: http://10.100.2.220:31001/loki/api/v1/push
scrape_configs:
- job_name: app_log
static_configs:
- targets:
- localhost
labels:
job: test-10.100.3.10
__path__: /var/log/syslog
_EOF_
服务化
启动Promtail作为服务,并使其能够在后台持续运行。
$ cat << _EOF_ > /etc/systemd/system/promtail.service
[Unit]
Description=promtail
Documentation=https://github.com/grafana/loki/releases
After=network.target
[Service]
User=root
Type=simple
ExecStart=/opt/promtail/promtail-linux-amd64 --config.file=/opt/promtail/promtail-config.yaml
Restart=on-failure
[Install]
WantedBy=multi-user.target
_EOF_
启动已创建的Promtail服务。
systemctl start promtail.service
systemctl enable promtail.service
启动后,请确认是否出现错误。
$ systemctl status promtail.service
● promtail.service - promtail
Loaded: loaded (/etc/systemd/system/promtail.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-08-18 06:54:12 UTC; 2h 3min ago
Docs: https://github.com/grafana/loki/releases
Main PID: 12330 (promtail-linux-)
Tasks: 8 (limit: 4721)
Memory: 15.3M
CPU: 38.298s
CGroup: /system.slice/promtail.service
└─12330 /opt/promtail/promtail-linux-amd64 --config.file=/opt/promtail/promtail-config.yaml
只要执行到这一步,就可以通过Grafana查看虚拟机的syslog。
可以通过浏览器连接到Grafana,并在探索中使用[标签过滤器]通过job: test-10.100.3.10的组合进行搜索来确认。
总结
我在上次和这次分别搭建了 Kubernetes + Grafana Loki + Promtail + NFS 的环境。
通过这个搭建,我能够获取任意虚拟机或 Pod 的日志并保存到 NFS 服务器。
作为本次实施内容的扩展,我们正在考虑将Loki微服务化以及扩展Kubernetes基础设施时对Loki服务的扩展支持。
另外,由于我们在本次实施中注重运行,所以没有详细设置Loki等运行时的参数。
因此,我们希望能够调整和设置与运行Loki相关的参数,例如压缩保存和归档自动化以及保存期限的设定,以便进行高效的日志保存并考虑到安全性。