在.NET Core 环境下对日志和指标进行集中化管理(二)

阅读数:31 2019 年 12 月 23 日 17:39

在.NET Core 环境下对日志和指标进行集中化管理(二)

下面介绍了如何使用.NET CORE + LOG4NET 来与 CloudWatch 进行集成。

为了运行在 EC2 上的应用程序拥有访问 CloudWatch 的权限,使用 AWS IAM 为 EC2 配置一个角色,使得其拥有 CloudWatch 的访问权限。

1. 跳转到 IAM 控制台

在.NET Core 环境下对日志和指标进行集中化管理(二)

2. 选择角色选项卡并创建角色

在.NET Core 环境下对日志和指标进行集中化管理(二)

3. 选择 AWS 服务,并选中 EC2 以便于角色附加到 EC2 上。然后点击下一步。

在.NET Core 环境下对日志和指标进行集中化管理(二)

4. 点击创建策略,并跳转到 JSON 编辑器。

在.NET Core 环境下对日志和指标进行集中化管理(二)

在.NET Core 环境下对日志和指标进行集中化管理(二)

5. 粘贴以下 Json 文本到到编辑器中。

Json

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"logs:CreateLogGroup"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "logs:PutLogEvents",
"Resource": "arn:aws:logs:*:*:log-group:*:log-stream:*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "logs:CreateLogStream",
"Resource": "arn:aws:logs:*:*:log-group:*"
}
]
}

__

6. 审核策略并创建策略

在.NET Core 环境下对日志和指标进行集中化管理(二)

7. 回到角色部分,在刷新策略选择器之后,搜索刚刚创建的策略。

在.NET Core 环境下对日志和指标进行集中化管理(二)

8. 审核并设置信角色名: “role-cloud-watch-logs”

在.NET Core 环境下对日志和指标进行集中化管理(二)

*** 如果您的 EC2 已经拥有相应的角色,请添加 CloudWatch 和 CloudWatch Logs 的 Write 权限。

完成权限设定后,可以启动一台 EC2 作为测试环境,并附加 role-cloud-watch-logs.

下面的步骤将阐述如何使用 Log4Net 来收集日志

  • 使用 dotnet core cli / Visual Studio 创建或者打开一个项目.
  • 在 Nuget 中添加 Logger.Log4net.

在.NET Core 环境下对日志和指标进行集中化管理(二)

  • 配置 Log4net.config

C#

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="awscwlogappender" type="AWS.Logger.Log4net.AWSAppender,AWS.Logger.Log4net">
<LogGroup>scrapycorefundamental</LogGroup>
<Region>ap-southeast-1</Region>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%type] - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="awscwlogappender"/>
</root>
</log4net>
</configuration>
  • 在程序配置好 LogRepo,以及打日志代码。

C#

复制代码
using System;
using log4net;
namespace dotnet_core_cw.Logs
{
public class LogsDemo
{
ILog logger = LogManager.GetLogger(typeof(LogsDemo));
public LogsDemo()
{
}
public void PrintLog()
{
for(int i= 0; i < 100; i++)
{
logger.Debug($"This is log {i}");
logger.Info($"This is log {i}");
}
}
}
}
  • 编译并上传到到 EC2 中,运行该程序。
  • 运行完成后,就可以在 cloudwatch 中看到打印的日志。

在.NET Core 环境下对日志和指标进行集中化管理(二)
日志组除了方便查看之外,还可以设置 Expire 来管理日志的生命周期,减少日志存储的费用。

在.NET Core 环境下对日志和指标进行集中化管理(二)

也可以与 S3 和 Elasticsearch 进行无缝集成,完成更多分析功能和转储需求。

在.NET Core 环境下对日志和指标进行集中化管理(二)

收集完日志后,可以使用日志分析工具来扫描日志分析对日志进行分析。 进入日志 Insight 中输入一些查询指令,就可以分析出您关心的日志指标。

在.NET Core 环境下对日志和指标进行集中化管理(二)

演示需要, 这里搜索了所有包含 DEBUG 的标签的日志来做指标。

在.NET Core 环境下对日志和指标进行集中化管理(二)

通过添加到仪表板的按钮加入到仪表板进行持续观察。

在.NET Core 环境下对日志和指标进行集中化管理(二)

以上这种日志指标观察方式为非侵入式观察,无需应用程序代码编写。通过日志分析形成观测指标。

如果项目需要通过日志来形成指标并报警,可以使用 CloudWatch Logs 中的创建指标功能。

  • 选择中一个日志组,并创建指标过滤器。

在.NET Core 环境下对日志和指标进行集中化管理(二)

  • 输入匹配项之后可以使用样例日志进行测试

在.NET Core 环境下对日志和指标进行集中化管理(二)

  • 将日志指标打入到指定的指标名称空间

在.NET Core 环境下对日志和指标进行集中化管理(二)

  • 回到指标面板中对应的名称空间,就可以看到相应的指标

在.NET Core 环境下对日志和指标进行集中化管理(二)

  • 通过设定指标的阈值来进行警报设定,并触发一定的运维事件。如,增加机器或者发送消息通知运维人员等。

如果项目中需要对应用程序做为侵入式指标观察。则可以按照通过调用 AWS CloudWatch SDK 来进行日志收集。

(1) 在项目中使用 nuget 添加 CloudWatch。

在.NET Core 环境下对日志和指标进行集中化管理(二)

(2) 安装完成之后就可以直接调用 SDK 来写入指标。

C#

复制代码
using Amazon.CloudWatch;
using Amazon.CloudWatch.Model;
using System;
using System.Threading;
namespace dotnet_core_cw.Metric
{
public class MetricDemo
{
IAmazonCloudWatch cloudwatch;
public MetricDemo()
{
cloudwatch = new AmazonCloudWatchClient(region:RegionEndpoint.APSoutheast1);
}
public void PrintMetric()
{
Random random = new Random();
while (true)
{
Thread.Sleep(100);
cloudwatch.PutMetricDataAsync(new PutMetricDataRequest()
{
Namespace="DEMO",
MetricData= new System.Collections.Generic.List<MetricDatum>()
{
new MetricDatum()
{
Unit= StandardUnit.Count,
MetricName="DemoMetric",
Value =random.Next(0,100)
}
}
}).Wait();
}
}
}
}

(3) 代码运行之后可以看到 CloudWatch 中多了一个命名空间。

在.NET Core 环境下对日志和指标进行集中化管理(二)

(4) 稍等几分钟之后,进入到这个命名空间中,就可以看到 DemoMetric 指标已经生成,并且有数据。

在.NET Core 环境下对日志和指标进行集中化管理(二)

通过以上几种方式,可以在应用程序中收集相应的指标来进行观测和预警。

总结

本文介绍了在.NET Core 环境下如何进行日志集中化管理。

(1) 如何通过.NET Core,log4net 与 CloudWatch 进行集成。

  • 配置 CloudWatch 权限
  • 安装 Log4Net-Logger.Log4net…
  • 配置 log4Net 使用 Logger.Log4net…

(2) 如何通过 CloudWatch Insight 进行日志分析和指标化。CloudWatch Log Insight 是一个可以对日志进行动态分析的组件,通过 CloudWatch Log Insight 可以快速地从海量数据中搜索到关键信息的一个工具,也可以通过 CloudWatch Log Insight 来形成非侵入式可观测指标。

(3) 如何通过.NET Core 的环境下如何进行指标收集。

  • 配置 CloudWatch 权限
  • 在程序中进行指标收集代码编码。
  • 在 CloudWatch 查看对应指标。

(4) 使用 Amazon CloudWatch 的指标监控警报功能来对指标进行持续监控,当发现指标异常的时候出发一些行为来通知到运维人员或者完成自动化运维的动作,减少运维人员的负担,增加整个系统的健壮性。

(5) 使用 Amazon CloudWatch 的日志文件导出和流式导出功能,方便企业进行日志审计以及不同日志系统通过 Elasticsearch 进行日志聚合分析。

作者介绍:

!
复制代码
AWS 解决方案架构师,负责基于 AWS 云计算方案架构的咨询和设计,在国内推广 AWS 云平台技术和各种解决方案。多年分布式系统开发架构经验

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/centralized-management-of-logs-and-metrics-in-the-net-core-environment/

评论

发布