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

使用 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 并使用适当的凭证进行配置。

复制代码
复制代码
# Use AWS CLI to create an Elasticsearch clustercreate an Elasticsearch cluster
aws es create-elasticsearch-domain --domain-name my-elasticsearch-domain \
    --elasticsearch-version "7.13" \
    --elasticsearch-cluster-config InstanceType=t2.small.elasticsearch,InstanceCount=2 \
    --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=10

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

  1. 在 AWS 上设置 Logstash

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

复制代码
复制代码
# Launch an EC2 instance with Logstash
aws ec2 run-instances --image-id ami-0c3fd0f5d33134a76 --instance-type t2.micro \--image-id ami-0c3fd0f5d33134a76 --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-instancei /path/to/your-key-pair.pem ec2-user@public-ip-of-instance

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

复制代码
复制代码
# Install Logstash
sudo yum install -y logstash
# Create a Logstash configuration file
sudo vi /etc/logstash/conf.d/my-logstash-config.conf

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

复制代码
复制代码
input {
  beats {
    port => 50445044
  }
}

output {
  elasticsearch {
    hosts => ["https://your-elasticsearch-endpoint"]
    index => "my-application-logs-%{+YYYY.MM.dd}"
  }
}

启动 Logstash:

复制代码
复制代码
sudo systemctl start logstash
sudo systemctl enable logstashenable logstash
  1. 在 AWS 上设置 Kibana

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

复制代码
复制代码
# Launch an EC2 instance with Kibana
aws ec2 run-instances --image-id ami-0c3fd0f5d33134a76 --instance-type t2.micro \--image-id ami-0c3fd0f5d33134a76 --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-instancei /path/to/your-key-pair.pem ec2-user@public-ip-of-instance

现在,安装 Kibana:

复制代码
复制代码
# Install Kibana
sudo yum install -y kibana
# Configure Kibana to connect to Elasticsearch
sudo vi /etc/kibana/kibana.yml

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

复制代码
复制代码
elasticsearch.hosts: ["https://your-elasticsearch-endpoint"]

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

复制代码
sudo systemctl start kibana
sudo systemctl enable kibanaenable kibana
  1. 将日志流式传输到 ELK Stack

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

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

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

复制代码
# Install Filebeat
sudo yum install -y filebeat
# Configure Filebeat to send logs to Logstash
sudo vi /etc/filebeat/filebeat.yml

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

复制代码
复制代码
output.logstash:
 hosts: ["logstash-private-ip:5044"]

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

启动并启用 Filebeat:

复制代码
复制代码
sudo systemctl start filebeat
sudo systemctl enable filebeatenable filebeat

使用 Fluentd(用于 JSON 日志):

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

复制代码
复制代码
# Install Fluentd
curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh
# Configure Fluentd to send logs to Logstash
sudo vi /etc/td-agent/td-agent.conf

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

复制代码
复制代码
<match my_application.**>
  @type forward
  <server>
    host logstash-private-ip
    port 5044
  </server>
</match>

启动并启用 Fluentd:

复制代码
sudo systemctl start td-agenttd-agent
sudo systemctl enable td-agent
  1. 在 Kibana 中监控和可视化日志

从您的 Web 浏览器访问 Kibana:

复制代码
http://public-ip-of-kibana-instance

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

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

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

相关推荐
王da魔3 小时前
部署Kubernetes
云原生·容器·kubernetes
池以遇4 小时前
云原生高级——kubernetes的部署
云原生·容器·kubernetes
智码看视界4 小时前
Day57-K8s核心概念速通:Pod、Deployment、Service与Ingress
云原生·容器·kubernetes·k8s·ingress·java后端·deployment
lisanmengmeng5 小时前
搭建elk环境并接入frostmourne,实现监控报警效果(四)
elk·日志·日志监控
Stewie121386 小时前
K8s集群部署
云原生·容器·kubernetes
starzy19906 小时前
K8s 集群容器管理工具选型与实战指南
云原生·容器
养海绵宝宝的小蜗6 小时前
K8S总结
云原生·容器·kubernetes
Yiiz.7 小时前
Kubernetes部署
云原生·容器·kubernetes
qizhideyu7 小时前
kubernetes
云原生·容器·kubernetes
wish3668 小时前
K8S 免镜像部署:通过 API 上传文件动态创建服务(以 Ollama 为例)
人工智能·云原生·容器·kubernetes·local llm