【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 2019-12-23
  • 本文字数:3023 字

    阅读完需:约 10 分钟

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

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


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

1.跳转到 IAM 控制台

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

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

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


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.审核策略并创建策略

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

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


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


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


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


  • 使用 dotnet core cli / Visual Studio 创建或者打开一个项目.

  • 在 Nuget 中添加 Logger.Log4net.



  • 配置 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 中看到打印的日志。



日志组除了方便查看之外,还可以设置 Expire 来管理日志的生命周期,减少日志存储的费用。



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



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



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



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



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


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


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



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



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



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



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


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


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



(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 中多了一个命名空间。



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



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

总结

本文介绍了在.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 进行日志聚合分析。


作者介绍:


!



### [](https://amazonaws-china.com/cn/blogs/china/tag/%E9%BB%84%E9%87%91%E5%B3%B0/)
AWS解决方案架构师,负责基于AWS云计算方案架构的咨询和设计,在国内推广AWS云平台技术和各种解决方案。多年分布式系统开发架构经验
复制代码


本文转载自 AWS 技术博客。


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


2019-12-23 17:39594

评论

发布
暂无评论
发现更多内容

Java入门 if分支结构 switch分支结构

Java 程序员 后端

Java反射的简单入门

Java 程序员 后端

Java书城项目第三阶段:优化

Java 程序员 后端

Java基础复习(DayEleven):内部类与代理

Java 程序员 后端

Java基础面试题——多线程

Java 程序员 后端

Java多线程知识点总结(思维导图+源码笔记),已整理成PDF版文档

Java 程序员 后端

Java常量池理解与总结

Java 程序员 后端

Java并发关键字-volatile

Java 程序员 后端

JavaWeb快速入门--Ajax&Json

Java 程序员 后端

Java个人知识点总结(基础篇)(1)

Java 程序员 后端

Java基础26~反射

Java 程序员 后端

Java学习笔记——多态(实例详解)

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day19】—

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day6】 —

Java 程序员 后端

Java并发编程-AQS

Java 程序员 后端

Java中级面试题及答案整理

Java 程序员 后端

Java实现:二叉搜索树(Binary Search Tree)

Java 程序员 后端

Java并发源码:阻塞队列实现之DelayQueue源码解析

Java 程序员 后端

JavaEE框架学习笔记——Spring篇

Java 程序员 后端

java反射-变量键值对排序

Java 程序员 后端

Java反射的简单入门(1)

Java 程序员 后端

Java个人知识点总结(基础篇)

Java 程序员 后端

Java之Spring基础与IOC

Java 程序员 后端

Java基础复习(DayNight):克隆与两个比较接口

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day28】—

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day36】—

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day40】—

Java 程序员 后端

JavaEE框架学习笔记——Mybatis篇

Java 程序员 后端

javaSE基础复习之面向对象(多态,内部类,内存回收)

Java 程序员 后端

JavaWeb之HTTP协议(一)

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—

Java 程序员 后端

在.NET Core 环境下对日志和指标进行集中化管理(二)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章