云资源的可观测性对于云基础架构服务的有效运营和维护有非常重要的作用。不同的云平台提供了不同的工具用于采集指标和日志,以亚马逊云为例,它提供了 Amazon CloudWatch 服务来收集一些资源的指标和日志。服务器日志采集的重要性不可忽视,因为服务日志是分析系统运行情况、故障排除、安全审计、监控、性能优化以及自动化运维的重要数据来源。对于运行在服务器上的服务日志的采集,行业中还有很多流行的方案比如 ELK Stack、Splunnk、Graylog、Grafana Loki 等。本文以 Grafana Loki 为例,介绍亚马逊云服务器上日志采集方案的部署。
基于 Loki 的日志采集系统由三大组件构成:
Agent - 代理或客户端,例如与 Loki 一起发布的 Promtail 或 Grafana 代理。这些代理会抓取日志,通过添加标签将日志转化 v 为数据流,并通过 HTTP API 将数据流推送到 Loki。
Loki - 主服务器,主要负责摄取和存储日志以及处理查询。
Grafana - Grafana 用于查询和显示日志数据。
其日志采集的架构如下:
1. 环境准备
登录亚马逊云科技 EC2 控制台,启动所需实例。在这里我们选择使用 t2.medium,EBS 卷大小为 80GB,镜像选用 Amazon Linux 2023。待实例启动完成后,远程登录该实例,进行软件安装。
PS:以下所有命令都是在 ec2-user 用户下使用
sudo yum update
# install docker
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
# install nginx for log collecting test
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# run docker command without sudo, you need to add your user to the docker group.
sudo usermod -aG docker $USER
sudo reboot
复制代码
2. 安装 Grafana
# Import the GPG key:
wget -q -O gpg.key https://rpm.grafana.com/gpg.key
sudo rpm --import gpg.key
# Create /etc/yum.repos.d/grafana.repo with content
sudo bash -c 'cat << EOF > /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
exclude=*beta*
EOF'
# install Grafana Enterprise
sudo yum install -y grafana-enterprise
# enable and start grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
复制代码
默认情况下,Grafana 服务监听 3000 端口,所以需要在 AWS EC2 的安全组放行该端口。Grafana 默认给出用户名密码为admin/admin
。Grafana 启动成功后,此时可以登录浏览器访问 http://ec2-ip:3000
进行测试。
登录Grafana控制台
3. 使用容器安装和启动 Loki & Promtail
# downloading loki config file and run loki in docker
wget https://raw.githubusercontent.com/grafana/loki/v2.9.1/cmd/loki/loki-local-config.yaml -O loki-config.yaml
docker run --name loki -d -v $(pwd):/mnt/config -p 3100:3100 grafana/loki:2.9.1 -config.file=/mnt/config/loki-config.yaml
# downloading promtail config file and run promtail in docker
wget https://raw.githubusercontent.com/grafana/loki/v2.9.1/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yaml
docker run --name promtail -d -v $(pwd):/mnt/config -v /var/log:/var/log --link loki grafana/promtail:2.9.1 -config.file=/mnt/config/promtail-config.yaml
复制代码
安装完成后,使用docker ps
命令查看容器状态:
查看容器状态
Loki 服务使用的端口为 3100,确保实例安全组放行该端口后,使用浏览器访问 http://ec2-ip:3100/metrics
进行测试。也可以访问http://ec2-ip:3100/ready
检查 Loki 是否就绪状态。
查看Loki状态1
查看Loki状态2
4. 登录 Grafana 并配置 Logi 数据源
配置 Loki 连接地址为http://localhost:3000
并保存配置,如下图所示,Loki 数据源配置成功:
配置数据源1
配置数据源2
接下来就可以在 Grafana 控制台对日志数据进行筛选和展示:
Grafana控制台对Loki数据源查询
当前只能看到 job = varlogs
标签的日志,我们可以继续在 promtail-config.yaml
配置文件中,添加更多日志源比如 nginx 和 grafana 日志,这两部分日志随着服务运行,已经写入了服务器的指定文件夹。在配置文件中添加了 /var/log/nginx
以及 /var/log/grafana
,修改后的配置文件内容如下图所示:
配置 promtail-config.yaml
修改完成后,使用如下命令重启 PromTail 服务,以让修改后的配置文件生效:
docker ps
docker restart {promtail-container-id}
复制代码
重启 PromTail 后,刷新页面就可以在 Grafana 中查看到 Label Filter 中新增了 grafana_log 以及 nginx_log 标签,继而而可以对这些日志进行过滤。
评论