在Windows Container中,没有写日志的情况下,如何排查系统的异常信息?

1 关于Windows事件日志

在以往基于IIS部署ASP.NET应用程序时,如果没有写指定日志的情况下,我们往往会使用Window事件日志来查看一些错误信息。

虽然事件日志的可读性和易用性不够好,但是还是可以帮助我们查看一些问题。这不,我在公司测试环境部署了我们团队的老系统(大单体ASP.NET MVC项目)的Service项目做POC试点验证,跑了几个接口之后发现系统直接返回503错误。对于第一次在Windows Container上跑ASP.NET MVC应用的我来说,有点懵,在容器内部查看IIS Log也没有足够的信息,我能想到的,就是去看事件日志了。

2 Docker下查看事件日志

Step1. 首先进入ASP.NET MVC容器实例内部:

>docker exec -it <container_name> powershell

Step2. 获取最新的20个事件日志,获得对应日志的Index:

>Get-Eventlog -newest 20 application
Index Time EntryType Source InstanceID Message
96 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
95 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
94 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
93 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
92 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
91 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
90 Jul 22 15:34 Error Application Error 1000 Faulting application name: w3wp.exe, version: 1...
89 Jul 22 15:34 Error .NET Runtime 1026 Application: w3wp.exe...
88 Jul 22 15:34 Error ASP.NET 4.0.30319.0 3221226797 An unhandled exception occurred and the process...
87 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
86 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
85 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
84 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
83 Jul 22 15:34 Information Windows Error Rep... 1001 Fault bucket , type 0...
......

Step3. 找到出错的那几个index,通过下面的命令查看错误日志:

>(Get-Eventlog -index 89 application).message
An unhandled exception occurred and the process was terminated. Application ID: /LM/W3SVC/1/ROOT Process ID: 7664 Exception: System.TypeInitializationException Message: The type initializer for 'NewLife.Log.XTrace' threw an exception. StackTrace: at NewLife.Log.XTrace.WriteException(Exception ex)
at NewLife.Threading.ThreadPoolX.<>c__DisplayClass2_0.<QueueUserWorkItem>b__0(Object s)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch() InnerException: System.UnauthorizedAccessException Message: Access to the path 'C:\inetpub\wwwroot\Config' is denied. StackTrace: at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, Object dirSecurityObj, Boolean checkHost
)
at System.IO.Directory.InternalCreateDirectoryHelper(String path, Boolean checkHost)
at System.IO.PathHelper.EnsureDirectory(String path, Boolean isfile)
......

从错误日志中可以看到,Config目录访问不到,经过调查发现,原来已有系统的IIS目录下有一个手动拷贝进去的Config目录(正确做法应该将其作为解决方案的一部分内容始终输出到release目录),于是乎将其拷贝到容器目录下,重新打镜像和运行,问题解决,平稳运行!

3 总结

本文介绍了如何在Windows Container中通过事件日志排查ASP.NET应用程序的异常日志信息,虽然文章很短小,但希望对你有用。

对于传统.NET 4.x应用的容器化迁移,我们也还在探索,相信探索和实践的深入,我会分享更多相关的内容。

作者:周旭龙

出处:https://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

传统.NET 4.x应用容器化体验(6)的更多相关文章

  1. 传统.NET 4.x应用容器化体验(1)

    我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本), ...

  2. 传统.NET 4.x应用容器化体验(4)

    上一篇我们试着将.NET 4.x的镜像推送到harbor私有镜像仓库,本篇我们来使用一下阿里云的镜像仓库服务并了解一下携程的实践. 1 关于阿里云镜像仓库 阿里云容器镜像服务(简称 ACR)是面向容器 ...

  3. 传统.NET 4.x应用容器化体验(5)

    前面几篇都是基于阿里云ECS直接玩的,有童鞋问直接用Windows Server 2019可以玩不,本篇就为你介绍一下如何给Windows Server 2019配置Docker环境. 1 准备工作 ...

  4. 传统.NET 4.x应用容器化体验(2)

    上一篇我们基于Windwos Server 2019 with Container初步跑了一个ASP.NET WebForm应用程序.本篇我们来自己编译部署一个ASP.NET MVC应用程序到Wind ...

  5. 传统.NET 4.x应用容器化体验(3)

    上一篇我们自己通过编写Dockerfile来编译部署一个ASP.NET MVC应用程序到Windows Container,这一篇我们来试着将.NET 4.x的镜像推送到harbor私有镜像仓库. 1 ...

  6. 容器化ICT融合初体验

    [编者的话]本次将分享的容器化ICT融合平台是一种面向未来ICT系统的新型云计算PaaS平台,它基于容器这一轻量级的虚拟化技术以及自动化的"微服务"管理架构,能够有效支撑应用快速上 ...

  7. Rio手把手教学:如何打造容器化应用程序的一站式部署体验

    11月19日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布Rio发布了beta版本,这是基于Kubernetes的应用程序部署引擎.它于今 ...

  8. Docker最全教程——MongoDB容器化(十二)

    MongoDB容器化 MongoDB是一个免费的.开源的.跨平台分布式面向文档存储的数据库,由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和 ...

  9. 开箱即用,Knative 给您极致的容器 Serverless 体验

    作者 | 冬岛  阿里巴巴技术专家 导读:托管 Knative 开箱即用,您不需要为这些常驻实例付出任何成本.结合 SLB 云产品提供 Gateway 的能力以及基于突发性能型实例的保留规格功能,极大 ...

  10. 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?

    作者 | changshuai FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维.容量规划.云产品打通集成等责任,使得开发者可以专注业务逻辑.提高交付速度 ( ...

随机推荐

  1. 递归--java进阶day08

    1.递归 2.案例 1.案例一 求出5的阶乘 我们会发现其中存在规律 我们先定义一个带返回值的方法,方便调用者使用 当给的数是1时,1的阶乘还是1,我们就可以直接返回 如果走了else,说明给的数不是 ...

  2. DevOps系列——Jenkins私服

    DevOps基础设施较多,所以客官不要太着急,要有个"渐进明细"的过程,前面说了GitLab,这里再说下Jenkins,这俩算 是较为核心的基础组件,其他组件可选项较多,而这俩的地 ...

  3. Greenplum优化总结

    Greenplum优化总结 GP优化需要了解清理缓存.性能监控.执行计划分析等知识.优化主要包含以下四方面: 表.字段,SQL,GP配置.服务器配置,硬件及节点资源. 一. 清理缓存: #!/usr/ ...

  4. HTB-UnderPass

    该靶机nmap扫描udp发现161端口snmp服务,利用snmpwalk扫描得到目录信息,使用dirsearch扫描得到一个yml文件,存放数据库账号密码,记录下来,此时需要登录口,使用字典扫描拼接/ ...

  5. 使用Python+SymPy计算无穷级数

    引言 在数学中,级数是指由数列的无限项组成的求和表达式.无穷级数的求和是一个非常重要且具有挑战性的数学问题,特别是在信号处理.物理学和工程学等领域.今天,我们将介绍如何利用 Python 中的 Sym ...

  6. 详细介绍Dubbo的SPI机制

    一.定义 Dubbo 的 SPI (Service Provider Interface) 机制是对 Java 原生 SPI 机制的增强和扩展,提供了更强大的扩展能力 二.Dubbo SPI 核心实现 ...

  7. 通过引用实现php无限极分类

    /** * 递归加引用实现无限极分类 * @param $items * @return array */ public function getTree2($items) {   $array = ...

  8. 三维装箱问题(3D Bin Packing Problem, 3D-BPP)

    提出问题 集装箱海运家具, 沙发, 茶几, 椅子等等, 有多少套家具,以及每个家具的长宽高都会告诉你. 把所有的家具都装进集装箱里, 要求通过算法算出一共需要多少集装箱. 1.要考虑怎样装, 需要的集 ...

  9. Multisim14.0安装包免费获取,超详细中文安装步骤助你快速上手!

    Multisim14.0简介 Multisim14.0是由美国国家仪器公司(NI)推出的专业电子设计自动化](EDA)工具,广泛应用于电路设计.仿真验证.教学实验及科研开发领域.其核心功能是通过虚拟仿 ...

  10. 【记录】Python3|将元组/列表/集合或字典解析成多个参数传入函数,以及定义可变参数函数

    [说人话版] 将元组/列表/集合或字典直接作为多个函数参数传入,只需要添加*或**即可. 样例如下. 在Python中,将元组.列表.集合或字典作为多个函数参数传入是一种非常方便的技巧,可以帮助我们在 ...