写点什么

基于亚马逊云服务器 +Grafana Loki 日志采集方案部署

作者:王坤祥
  • 2023-11-08
    北京
  • 本文字数:1863 字

    阅读完需:约 6 分钟

云资源的可观测性对于云基础架构服务的有效运营和维护有非常重要的作用。不同的云平台提供了不同的工具用于采集指标和日志,以亚马逊云为例,它提供了 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 dockersudo yum install -y dockersudo systemctl start dockersudo systemctl enable docker
# install nginx for log collecting test sudo yum install -y nginxsudo systemctl start nginxsudo systemctl enable nginx
# run docker command without sudo, you need to add your user to the docker group. sudo usermod -aG docker $USERsudo reboot
复制代码


2. 安装 Grafana

# Import the GPG key: wget -q -O gpg.key https://rpm.grafana.com/gpg.keysudo rpm --import gpg.key
# Create /etc/yum.repos.d/grafana.repo with contentsudo bash -c 'cat << EOF > /etc/yum.repos.d/grafana.repo[grafana]name=grafanabaseurl=https://rpm.grafana.comrepo_gpgcheck=1enabled=1gpgcheck=1gpgkey=https://rpm.grafana.com/gpg.keysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crtexclude=*beta*EOF'
# install Grafana Enterprisesudo yum install -y grafana-enterprise
# enable and start grafanasudo systemctl enable grafana-serversudo 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 dockerwget https://raw.githubusercontent.com/grafana/loki/v2.9.1/cmd/loki/loki-local-config.yaml -O loki-config.yamldocker 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 dockerwget https://raw.githubusercontent.com/grafana/loki/v2.9.1/clients/cmd/promtail/promtail-docker-config.yaml -O promtail-config.yamldocker 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 psdocker restart {promtail-container-id}
复制代码

重启 PromTail 后,刷新页面就可以在 Grafana 中查看到 Label Filter 中新增了 grafana_log 以及 nginx_log 标签,继而而可以对这些日志进行过滤。


用户头像

王坤祥

关注

日拱一卒,功不唐捐。 2017-10-17 加入

不懂热能的低温工程师不是好程序猿

评论

发布
暂无评论
基于亚马逊云服务器+Grafana Loki日志采集方案部署_Grafana_王坤祥_InfoQ写作社区