使用 ELK Stack 进行云原生日志记录和监控:AWS 中的开发运营方法

132 阅读5分钟

使用 ELK Stack 进行云原生日志记录和监控

欢迎来到雲闪世界。在当今的云原生世界中,日志记录和监控是强大的 DevOps 策略的重要组成部分。监控应用程序性能、跟踪错误和分析日志对于确保无缝操作和主动识别潜在问题至关重要。在本文中,我们将指导您使用 AWS 上的 ELK Stack(Elasticsearch、Logstash 和 Kibana)设置云原生日志记录和监控,从而实现以 DevOps 为中心的方法来管理基于云的应用程序。

1.什么是ELK堆栈?

ELK Stack 是一种流行的开源解决方案,用于集中、搜索和可视化日志和指标。它由三个核心组件组成:

  • Elasticsearch:分布式、可扩展的搜索引擎,用于存储日志和指标并为其建立索引。 - Logstash:一种数据处理管道,可在将日志发送到 Elasticsearch 之前从各种来源获取并转换日志。 - Kibana:一个强大的数据可视化和探索工具,可以实时洞察 Elasticsearch 中存储的数据。
  1. 在 AWS 上设置 Elasticsearch

我们将使用 AWS CLI 在 Amazon Elasticsearch Service 中创建 Elasticsearch 集群。确保您已安装 AWS CLI 并使用适当的凭证进行配置。

# 使用 AWS CLI 创建 Elasticsearch 集群创建Elasticsearch 集群
aws es create -elasticsearch-domain --domain-name my-elasticsearch-domain \ 
    --elasticsearch-version "7.13" \ 
    --elasticsearch-cluster-config InstanceType=t2.small.elasticsearch,InstanceCount=2 \ 
    --ebs-选项 EBSEnabled=true,VolumeType=gp2,VolumeSize=10

注意:将“my-elasticsearch-domain”替换为您的域的唯一名称。

  1. 在 AWS 上设置 Logstash

为了设置 Logstash,我们将使用 Amazon Linux 2 AMI 启动安装了 Logstash 的 EC2 实例。使用 SSH 连接到实例。


# 使用 Logstash aws ec2 run-instances --image-id ami-0c3fd0f5d33134a76 --instance-type t2.micro \启动 EC2 实例--image-id ami- 0 c3fd0f5d33134a76 --instance-type t2 .micro \ 
    --key-name your-key-pair-name --security-group-ids sg-xxxxxxx --subnet-id subnet-xxxxxxx

注意:将 ami-0c3fd0f5d33134a76 替换为适合您所在区域的 Amazon Linux 2 AMI ID。另外,将 your-key-pair-name 替换为您的 SSH 密钥对的名称,将 sg-xxxxxxx 替换为您的安全组的 ID,将 subnet-xxxxxxx 替换为您的子网的 ID。

接下来,通过 SSH 进入实例:

ssh -i /path/to/your-key-pair.pem ec2-user@public-ip-of-instance我/path/到/your-key-pair .pem ec2-user @public-ip-of-instance

现在,安装 Logstash 并将其配置为将日志转发到 Elasticsearch。

# 安装Logstash
 sudo yum install -ylogstash 
# 创建Logstash配置文件
sudo vi /etc/logstash/conf.d/my-logstash-config.conf

在 my-logstash-config.conf 文件中,添加以下配置以从 Filebeat 接收日志:

输入{
  击败{
    端口=> 5044第5044
  章​  ​    ​​​    ​​  ​​

your-elasticsearch-endpoint 替换为您的 Elasticsearch 集群的端点。

启动 Logstash:

sudo systemctl 启动logstash 
sudo systemctl 启用logstash启用日志存储

4. 在 AWS 上设置 Kibana

与 Logstash 类似,我们将使用 Amazon Linux 2 AMI 启动另一个安装了 Kibana 的 EC2 实例。


# 使用 Kibana aws ec2 run-instances --image-id ami-0c3fd0f5d33134a76 --instance-type t2.micro \启动 EC2 实例--image-id ami- 0 c3fd0f5d33134a76 --instance-type t2 .micro \ 
    --key-name your-key-pair-name --security-group-ids sg-xxxxxxx --subnet-id subnet-xxxxxxx

通过 SSH 登录 Kibana 实例:

ssh -i /path/to/your-key-pair.pem ec2-user@public-ip-of-instance我/path/到/your-key-pair .pem ec2-user @public-ip-of-instance

现在,安装 Kibana:

# 安装 Kibana
 sudo yum install -y kibana 
# 配置 Kibana 连接 Elasticsearch
 sudo vi /etc/kibana/kibana.yml

kibana.yml 文件中,添加以下配置以指定 Elasticsearch 端点:

elasticsearch.hosts:[ “https://your- elasticsearch -endpoint” ]

your-elasticsearch-endpoint 替换为您的 Elasticsearch 集群的端点。

启动 Kibana:

sudo systemctl 启动 kibana 
sudo systemctl 启用 kibana启用kibana

5. 将日志流式传输到 ELK Stack

选择以下日志传送程序之一将日志从您的应用程序流式传输到 Logstash:

使用 Filebeat(用于文本日志):

在应用程序服务器上安装并配置 Filebeat:

# 安装Filebeat
 sudo yum install -y filebeat 
# 配置Filebeat发送日志到Logstash
 sudo vi /etc/filebeat/filebeat.yml

在 filebeat.yml 文件中添加以下配置:

输出.logstash:
 主机:[ “logstash-private-ip:5044” ]

logstash-private-ip 替换为 Logstash 实例的私有 IP 地址。

启动并启用 Filebeat:

sudo systemctl 启动 filebeat 
sudo systemctl 启用 filebeat启用文件节拍

使用 Fluentd(用于 JSON 日志):

在应用程序服务器上安装并配置 Fluentd:

# 安装 Fluentd
 curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh 
# 配置Fluentd发送日志到Logstash
 sudo vi /etc/td-agent/td-agent.conf

td-agent.conf文件中,添加以下配置:

<匹配 my_application. **>
   @typeforward 
  <服务器>
    主机logstash-private-ip
    端口5044 
  </服务器> 
</匹配>

logstash-private-ip 替换为 Logstash 实例的私有 IP 地址。

启动并启用 Fluentd:

sudo systemctl 启动 td-agenttd -agent 
sudo systemctl 启用td -agent

6. 在 Kibana 中监控和可视化日志

从您的 Web 浏览器访问 Kibana:

http://public-ip-of-kibana-instance

在 Kibana 中创建索引模式来定义日志数据结构。在 Kibana 中探索、可视化和创建仪表板,以深入了解应用程序的性能和运行状况。

结论 通过执行这些步骤并使用提供的 AWS CLI 命令和配置文件,我们可以使用 AWS 上的 ELK Stack 设置云原生日志记录和监控。这种以 DevOps 为中心的方法使我们的团队能够高效地排除故障、调试和优化云原生应用程序,从而在云原生时代增强客户体验并取得业务成功。通过集中的日志和指标,我们可以深入了解您的应用程序的性能和运行状况,从而更好地制定决策并主动管理您的基于云的应用程序。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)