在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. 【Python】使用PyInstaller把代码打包成exe可执行文件

    使用PyInstaller打包自己写好的代码 零.需求 最近接到一个小单,需要批量修改文档内容,用Python做好后要打包成exe程序给客户的Win7电脑使用,此时需要用到PyInstaller打包自 ...

  2. 请运行命令来卸载Oracle主目录

    卸载Oracle数据库碰见的一个不一样的操作,留爪. 正常点的软件卸载直接点卸载即可, Oracle 卸载非要来点不一样警告, 如图: 注意:不要被图里的斜杠符号忽略了,准确的应该是: # 注意斜杠 ...

  3. Docker Commonds

    脑子不够用,记录下自己所学所用的命令,备忘...不断补充. 最最基本的命令 查看 docker 信息 docker info 查看 docker 版本及相关信息 docker version 仅查看 ...

  4. android中大咖:TlistView

    d的android中的Tlistview相当于cxGrid,其开发使用中的主咖地位至高无上. 可是如何高效使用快速实现的需求呢?需要的话补官方的教程 上图: GOODLUCK!

  5. 基于MCP实现text2sql

    目的:基于MCP实现text2sql能力 参考:https://blog.csdn.net/hacker_Lees/article/details/146426392 服务器 选用开源的MySQL M ...

  6. 多模态自动驾驶混合渲染HRMAD:将NeRF和3DGS进行感知验证和端到端AD测试

    基于3DGS和NeRF的三维重建技术在过去的一年中取得了快速的进步,动态模型也变得越来越普遍,然而这些模型仅限于处理原始轨迹域内的对象. HRMAD作为一种混合方案,将传统的基于网格的动态三维神经重建 ...

  7. PC端网页/web通过自定义协议唤起启动windows桌面应用

    PC端网页/web通过自定义协议唤起启动windows桌面应用 步骤: 写注册表 调用 Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\ ...

  8. 编译nwjs/node-webkit可用的sqlite3简单靠谱的解决方案/在nwjs里使用sqlite

    大胸弟,如果你和我一样把官方给的方法和网上的文章都试过了还是编译不过,但又必须在nwjs里使用sqlite数据库,那么请继续往下看. 我的解决方法就是: 1.不编译 来吧,拥抱html5吧,具体来说就 ...

  9. EFCore Study(3)——“一”对多关系的设定和插入、查找级联操作

    一.建立文章.评论类 /// <summary> /// 文章 /// </summary> public class Artitle { public int Id { ge ...

  10. crypto14解题思路

    crypto14解题思路 ##二进制 001100110011001100100000001101000011010100100000001101010011000000100000001100100 ...