IIS 7.0 及更高版本。此设置中不涉及负载均衡器。被请求的文件是一个小的间隔图像,可以使用 JQuery 同步或异步加载。该文件并不重要,它只是让最终用户访问此 IIS 服务器进行分析的一种方式。
我需要从 IIS 日志中捕获访问者的机器名称。当前日志中已包含客户端 IP 地址。问题是 IP 在我们的环境中是短暂的,如果我不尽快将其解析为机器名称,它就没有用。所以我们需要实时确定访问IP的机器名。
什么是解决这个问题的好方法。这些是我找到的选项...
1) 在 IIS 中启用反向 DNS 查找 -> http://www.expta.com/2010/01/how-to-enable-reverse-dns-lookup-in-iis.html。这会影响服务器性能,我担心这会最终导致用户请求停止,并导致他的页面加载缓慢,因为反向查找操作的费用增加
2) 编写一个 IIS 日志模块,该模块通过对 IP 进行严格查找并在日志中写入机器名称来增强日志记录。>> 恐怕这会减慢最终用户的请求周转时间并由于反向 DNS 查找而影响服务器性能。几乎我想这是我在做上面的第 1 点,而不是依赖微软的内置功能。最后,实时反向 DNS 查找会影响性能。
3) 与上面的第 1 点或第 2 点相同,但我将更改用户点击的页面的 HTML,以使用异步 javascript 调用(而不是内联调用)加载 IIS 托管图像文件。这样,最终用户不必等待此 IIS 请求完成,并且可以加载剩余的页面(对他们重要的内容),而无需依赖间隔图像请求来完成。但是浏览器仍然会专门为异步图像加载一个线程,这仍然是最终用户的性能损失。
4) 只需使用默认的 IIS 日志记录即可实时登录。让一个单独的 C# 应用程序每 5 分钟左右读取一次文件,检测添加的新行,解析它们并获取 IP,进行反向查找并找到机器名称,并根据要求将其记录到数据库或平面文件中。另一方面,现在我几乎需要实时登录,因为如果我不立即记录,那么在我的应用程序读取日志、找到它并进行反向查找时,IP 可能已经分配给了另一台机器在上面。此外,我还必须处理读取日志文件的复杂性,以便在上次读取后仅读取新插入的日志条目等。
5) http://www.iis.net/learn/extensions/advanced-logging-module/advanced-logging-for-iis-real-time-logging -> 我想这与上面的第 2 点相同,只是它是用 VC++ 代替 C# 编写。所以我猜这种方法也有同样的缺点
因此,每种方法似乎都有缺点。您认为解决问题的好方法是什么?