lucene可以用来做日志分析工具和日志故障定位吗

Linux系统日志分析的基本教程
开源中文社区 & 09-16 12:11:41 & 作者:佚名 &
这篇文章主要介绍了Linux系统日志分析的基本教程,是Linux入门学习中的基础知识,需要的朋友可以参考下
首先,我们将描述有关 Linux 日志是什么,到哪儿去找它们,以及它们是如何创建的基础知识
Linux 系统日志许多有价值的日志文件都是由 Linux 自动地为你创建的。你可以在 /var/log 目录中找到它们。下面是在一个典型的 Ubuntu 系统中这个目录的样子:一些最为重要的 Linux 系统日志包括:
/var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息。基于 Debian 的系统如 Ubuntu 在 /var/log/syslog 中存储它们,而基于 RedHat 的系统如 RHEL 或 CentOS 则在 /var/log/messages 中存储它们。/var/log/auth.log 或 /var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。/var/log/kern 存储内核的错误和警告数据,这对于排除与定制内核相关的故障尤为实用。/var/log/cron 存储有关 cron 作业的信息。使用这个数据来确保你的 cron 作业正成功地运行着。Digital Ocean 有一个关于这些文件的完整教程,介绍了 rsyslog 如何在常见的发行版本如 RedHat 和 CentOS 中创建它们。
应用程序也会在这个目录中写入日志文件。例如像 Apache,Nginx,MySQL 等常见的服务器程序可以在这个目录中写入日志文件。其中一些日志文件由应用程序自己创建,其他的则通过 syslog (具体见下文)来创建。
什么是 Syslog?Linux 系统日志文件是如何创建的呢?答案是通过 syslog 守护程序,它在 syslog 套接字 /dev/log 上监听日志信息,然后将它们写入适当的日志文件中。
单词&syslog& 代表几个意思,并经常被用来简称如下的几个名称之一:
Syslog 守护进程 & 一个用来接收、处理和发送 syslog 信息的程序。它可以远程发送 syslog 到一个集中式的服务器或写入到一个本地文件。常见的例子包括 rsyslogd 和 syslog-ng。在这种使用方式中,人们常说&发送到 syslog&。Syslog 协议 & 一个指定日志如何通过网络来传送的传输协议和一个针对 syslog 信息(具体见下文) 的数据格式的定义。它在 RFC-5424 中被正式定义。对于文本日志,标准的端口是 514,对于加密日志,端口是 6514。在这种使用方式中,人们常说&通过 syslog 传送&。Syslog 信息 & syslog 格式的日志信息或事件,它包括一个带有几个标准字段的消息头。在这种使用方式中,人们常说&发送 syslog&。Syslog 信息或事件包括一个带有几个标准字段的消息头,可以使分析和路由更方便。它们包括时间戳、应用程序的名称、在系统中信息来源的分类或位置、以及事件的优先级。
下面展示的是一个包含 syslog 消息头的日志信息,它来自于控制着到该系统的远程登录的 sshd 守护进程,这个信息描述的是一次失败的登录尝试:
&34&1 T22:14:15.003Z server1.com sshd - - pam_unix(sshd:auth): au logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.2.2Syslog 格式和字段每条 syslog 信息包含一个带有字段的信息头,这些字段是结构化的数据,使得分析和路由事件更加容易。下面是我们使用的用来产生上面的 syslog 例子的格式,你可以将每个值匹配到一个特定的字段的名称上。代码如下:&%pri%&%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% %msg%n下面,你将看到一些在查找或排错时最常使用的 syslog 字段:
时间戳时间戳 (上面的例子为 T22:14:15.003Z) 暗示了在系统中发送该信息的时间和日期。这个时间在另一系统上接收该信息时可能会有所不同。上面例子中的时间戳可以分解为:
年,月,日。T 为时间戳的必需元素,它将日期和时间分隔开。22:14:15.003 是 24 小时制的时间,包括进入下一秒的毫秒数(003)。Z 是一个可选元素,指的是 UTC 时间,除了 Z,这个例子还可以包括一个偏移量,例如 -08:00,这意味着时间从 UTC 偏移 8 小时,即 PST 时间。主机名主机名 字段(在上面的例子中对应 server1.com) 指的是主机的名称或发送信息的系统.
应用名应用名 字段(在上面的例子中对应 sshd:auth) 指的是发送信息的程序的名称.
优先级优先级字段或缩写为 pri (在上面的例子中对应 ) 告诉我们这个事件有多紧急或多严峻。它由两个数字字段组成:设备字段和紧急性字段。紧急性字段从代表 debug 类事件的数字 7 一直到代表紧急事件的数字 0 。设备字段描述了哪个进程创建了该事件。它从代表内核信息的数字 0 到代表本地应用使用的 23 。
Pri 有两种输出方式。第一种是以一个单独的数字表示,可以这样计算:先用设备字段的值乘以 8,再加上紧急性字段的值:(设备字段)(8) + (紧急性字段)。第二种是 pri 文本,将以&设备字段.紧急性字段& 的字符串格式输出。后一种格式更方便阅读和搜索,但占据更多的存储空间。
分析 Linux 日志
日志中有大量的信息需要你处理,尽管有时候想要提取并非想象中的容易。在这篇文章中我们会介绍一些你现在就能做的基本日志分析例子(只需要搜索即可)。我们还将涉及一些更高级的分析,但这些需要你前期努力做出适当的设置,后期就能节省很多时间。对数据进行高级分析的例子包括生成汇总计数、对有效值进行过滤,等等。
我们首先会向你展示如何在命令行中使用多个不同的工具,然后展示了一个日志管理工具如何能自动完成大部分繁重工作从而使得日志分析变得简单。
用 Grep 搜索搜索文本是查找信息最基本的方式。搜索文本最常用的工具是 grep。这个命令行工具在大部分 Linux 发行版中都有,它允许你用正则表达式搜索日志。正则表达式是一种用特殊的语言写的、能识别匹配文本的模式。最简单的模式就是用引号把你想要查找的字符串括起来。
正则表达式这是一个在 Ubuntu 系统的认证日志中查找 &user hoover& 的例子:代码如下:$ grep "user hoover" /var/log/auth.logAccepted password for hoover from 10.0.2.2 port 4792 ssh2pam_unix(sshd:session): session opened for user hoover by (uid=0)pam_unix(sshd:session): session closed for user hoover构建精确的正则表达式可能很难。例如,如果我们想要搜索一个类似端口 &4792& 的数字,它可能也会匹配时间戳、URL 以及其它不需要的数据。Ubuntu 中下面的例子,它匹配了一个我们不想要的 Apache 日志。代码如下:$ grep "4792" /var/log/auth.logAccepted password for hoover from 10.0.2.2 port 4792 ssh274.91.21.46 - - [31/Mar/:32 +0000] &GET /scripts/samples/search?q=4972 HTTP/1.0& 404 545 &-& &-&
环绕搜索另一个有用的小技巧是你可以用 grep 做环绕搜索。这会向你展示一个匹配前面或后面几行是什么。它能帮助你调试导致错误或问题的东西。B 选项展示前面几行,A 选项展示后面几行。举个例子,我们知道当一个人以管理员员身份登录失败时,同时他们的 IP 也没有反向解析,也就意味着他们可能没有有效的域名。这非常可疑!代码如下:$ grep -B 3 -A 2 'Invalid user' /var/log/auth.logApr 28 17:06:20 ip-172-31-11-241 sshd[12545]: reverse mapping checking getaddrinfo for 216-19-2-8.commspeed.net [216.19.2.8] failed - POSSIBLE BREAK-IN ATTEMPT!Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Invalid user admin from 216.19.2.8Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: input_userauth_request: invalid user admin [preauth]Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]Tail你也可以把 grep 和 tail 结合使用来获取一个文件的最后几行,或者跟踪日志并实时打印。这在你做交互式更改的时候非常有用,例如启动服务器或者测试代码更改。代码如下:$ tail -f /var/log/auth.log | grep 'Invalid user'Apr 30 19:49:48 ip-172-31-11-241 sshd[6512]: Invalid user ubnt from 219.140.64.136Apr 30 19:49:49 ip-172-31-11-241 sshd[6514]: Invalid user admin from 219.140.64.136关于 grep 和正则表达式的详细介绍并不在本指南的范围,但 Ryan&s Tutorials 有更深入的介绍。
日志管理系统有更高的性能和更强大的搜索能力。它们通常会索引数据并进行并行查询,因此你可以很快的在几秒内就能搜索 GB 或 TB 的日志。相比之下,grep 就需要几分钟,在极端情况下可能甚至几小时。日志管理系统也使用类似 Lucene 的查询语言,它提供更简单的语法来检索数字、域以及其它。
用 Cut、 AWK、 和 Grok 解析Linux 提供了多个命令行工具用于文本解析和分析。当你想要快速解析少量数据时非常有用,但处理大量数据时可能需要很长时间。
Cutcut 命令允许你从有分隔符的日志解析字段。分隔符是指能分开字段或键值对的等号或逗号等。
假设我们想从下面的日志中解析出用户:代码如下:pam_unix(su:auth): au logname=hoover uid=1000 euid=0 tty=/dev/pts/0 ruser=hoover rhost=
user=root我们可以像下面这样用 cut 命令获取用等号分割后的第八个字段的文本。这是一个 Ubuntu 系统上的例子:代码如下:$ grep "authentication failure" /var/log/auth.log | cut -d '=' -f 8roothooverrootnagiosnagiosAWK另外,你也可以使用 awk,它能提供更强大的解析字段功能。它提供了一个脚本语言,你可以过滤出几乎任何不相干的东西。
例如,假设在 Ubuntu 系统中我们有下面的一行日志,我们想要提取登录失败的用户名称:代码如下:Mar 24 08:28:18 ip-172-31-11-241 sshd[32701]: input_userauth_request: invalid user guest [preauth]你可以像下面这样使用 awk 命令。首先,用一个正则表达式 /sshd.*invalid user/ 来匹配 sshd invalid user 行。然后用 { print $9 } 根据默认的分隔符空格打印第九个字段。这样就输出了用户名。代码如下:$ awk '/sshd.*invalid user/ { print $9 }' /var/log/auth.logguestadmininfotestubnt你可以在 Awk 用户指南 中阅读更多关于如何使用正则表达式和输出字段的信息。
日志管理系统日志管理系统使得解析变得更加简单,使用户能快速的分析很多的日志文件。他们能自动解析标准的日志格式,比如常见的 Linux 日志和 Web 服务器日志。这能节省很多时间,因为当处理系统问题的时候你不需要考虑自己写解析逻辑。
下面是一个 sshd 日志消息的例子,解析出了每个 remoteHost 和 user。这是 Loggly 中的一张截图,它是一个基于云的日志管理服务。你也可以对非标准格式自定义解析。一个常用的工具是 Grok,它用一个常见正则表达式库,可以解析原始文本为结构化 JSON。下面是一个 Grok 在 Logstash 中解析内核日志文件的事例配置:代码如下:filter{
match =& {"message" =& "%{CISCOTIMESTAMP:timestamp} %{HOST:host} %{WORD:program}%{NOTSPACE} %{NOTSPACE}%{NUMBER:duration}%{NOTSPACE} %{GREEDYDATA:kernel_logs}"
}}下图是 Grok 解析后输出的结果:用 Rsyslog 和 AWK 过滤过滤使得你能检索一个特定的字段值而不是进行全文检索。这使你的日志分析更加准确,因为它会忽略来自其它部分日志信息不需要的匹配。为了对一个字段值进行搜索,你首先需要解析日志或者至少有对事件结构进行检索的方式。
如何对应用进行过滤通常,你可能只想看一个应用的日志。如果你的应用把记录都保存到一个文件中就会很容易。如果你需要在一个聚集或集中式日志中过滤一个应用就会比较复杂。下面有几种方法来实现:
用 rsyslog 守护进程解析和过滤日志。下面的例子将 sshd 应用的日志写入一个名为 sshd-message 的文件,然后丢弃事件以便它不会在其它地方重复出现。你可以将它添加到你的 rsyslog.conf 文件中测试这个例子。代码如下::programname, isequal, &sshd& /var/log/sshd-messages&~用类似 awk 的命令行工具提取特定字段的值,例如 sshd 用户名。下面是 Ubuntu 系统中的一个例子。代码如下:$ awk '/sshd.*invalid user/ { print $9 }' /var/log/auth.logguestadmininfotestubnt用日志管理系统自动解析日志,然后在需要的应用名称上点击过滤。下面是在 Loggly 日志管理服务中提取 syslog 域的截图。我们对应用名称 &sshd& 进行过滤,如维恩图图标所示。
如何过滤错误一个人最希望看到日志中的错误。不幸的是,默认的 syslog 配置不直接输出错误的严重性,也就使得难以过滤它们。
这里有两个解决该问题的方法。首先,你可以修改你的 rsyslog 配置,在日志文件中输出错误的严重性,使得便于查看和检索。在你的 rsyslog 配置中你可以用 pri-text 添加一个 模板,像下面这样:代码如下:"&%pri-text%& : %timegenerated%,%HOSTNAME%,%syslogtag%,%msg%n"这个例子会按照下面的格式输出。你可以看到该信息中指示错误的 err。代码如下:&authpriv.err& : Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure你可以用 awk 或者 grep 检索错误信息。在 Ubuntu 中,对这个例子,我们可以用一些语法特征,例如 . 和 &,它们只会匹配这个域。代码如下:$ grep '.err&' /var/log/auth.log&authpriv.err& : Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure 你的第二个选择是使用日志管理系统。好的日志管理系统能自动解析 syslog 消息并抽取错误域。它们也允许你用简单的点击过滤日志消息中的特定错误。
下面是 Loggly 中一个截图,显示了高亮错误严重性的 syslog 域,表示我们正在过滤错误:
大家感兴趣的内容
12345678910
最近更新的内容温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
<div class="editopbar"为而不有……
闹笑话了,最近在湾区开车的时候用Google地图导航:
导航总是在显示还有0.2英里的时候告诉我,还有1000英尺(我理解是还有200英尺啊)?
明明还有100英尺(我理解是还有0.1英里),怎么立刻就该拐弯了?
这不会是谷歌地图的Bug吧?
后来一查才知道:1英里等于5280英尺,怪不得……
1 参加CES的中国厂商: 高调 vs. 平庸
法拉第电动的发布第二天在现场观察了一下:前去拍照的人挺多,很多人也是被前卫的造型惊呆了,听到不少人说:amazing, fantastic,也有人说ridiculous,另外一个比较抓眼球的是载人的亿航无人驾驶飞机。为乐视汽车/亿航的“高调”捏把汗,这些厂商如果今天挖了坑,可能需要国内同行用好几代产品去填。
相比互联网风格厂商的过于高调,中国传统家电厂商普遍缺乏创意:虽然展厅面积越来越大了,但展示的内容很空洞,产品定位相比较日韩厂商完全跟随,没特色。CES的参观者很多都是冲着新概念和开脑洞来的,如果只是把商场的专柜搬过去:就是完全浪费了在主会场的机会,需要订单的不如去参加广交会更好啊。
当然了,个人并非完全赞同互联网背景厂商的策略,但至少他们在CES主会场做了该做的事情,营销上还是及格的。传统家电厂商则完全还停留在去摆摊的阶段。
2 电动车:辅助驾驶 vs. 全自动 / 低速 vs. 高速
电动车分成高速电动车和低速电动车两个领域。
高速电动车和汽车领域在这届展出了大量和自动驾驶相关的技术:自动驾驶今年是热门,但我怎么觉得离得很远呢,或者自动驾驶根本不应该首先是个人使用的目标呢,自动驾驶有可能先在货运领域和全封闭道路环境下实现,而且自动驾驶的基础目前是图像视觉识别和雷达,成本过高,受气候等环境变化的影响太大。而且就算是自动驾驶实现了:也非常担心实际环境中的复杂变数。
更现实的是辅助驾驶/辅助停车有可能会短期内大量普及:类比下自动挡和倒车雷达在家用汽车领域的普及速度。
这次起亚KIA的智能驾驶解决方案挺实用的:
比如盲点区域的物体检测/报警:并线时候检测盲点区域和可能进入的车辆,减少碰撞,
并线报警:如果是无意识下的偏离当前车道会有并线警告;
遇到紧急情况的自动制动:避免追尾;
还有不规范的远光灯使用:
其他车辆灯光靠近后自动关闭远光灯(在某些国家应该强制配备)
根据道路坡度自动调整远光灯角度
相比高速电动车:低速电动车产品因为没有太多安全方面的强监管,反而有更快的进化速度。在滑板车领域:今年NineBot的展台比去年大了10倍:关注尝试的人非常多。通过在便携性,易学性上的改进,相信会比SegWay有更好的表现。能够放进一般汽车后备箱的两轮电动自行车/滑板还会有额外更多的使用场景。
3 VR 裸眼 vs. 头盔
各种全景摄像工具越来越成熟:让VR内容制作成本越来越低。但头盔真的是消费VR内容最佳的方式吗?尤其是家用场景下:一直像盲人一样戴着眼镜恐怕不是一般人可以习惯的。上次在MakerFaire 感受比较好的是理光的一个球幕投影,也许未来会有专用小帐篷来观看VR/球幕内容。
替卢亮发招聘启示:岗位需求:算法分析师2名公司名称:业务方向:无线互联网的电商平台建模方向:商品推荐,用户积分平衡体系、无线互联网用户行为分析要求:研究生,熟悉机器学习,熟悉概率统计,有日志分析经验者优先素质:非常聪明(因为和你一起工作的人都是geek),善于学习,非常敏锐,善于总结联系方式:
原文(英文)地址: & 版权声明:这是一篇知识性的文档,主要目的是为了让Web缓存相关概念更容易被开发者理解并应用于实际的应用环境中。为了简要起见,某些实现方面的细节被简化或省略了。如果你更关心细节实现则完全不必耐心看完本文,后面参考文档和更多深入阅读部分可能是你更需要的内容。什么是Web缓存,为什么要使用它?缓存的类型:浏览器缓存;代理服务器缓存;Web缓存无害吗?为什么要鼓励缓存?Web缓存如何工作:如何控制(控制不)缓存:HTML Meta标签 vs. HTTP头信息;Pragma HTTP头信息(为什么不起作用);使用Expires(过期时间)HTTP头信息控制保鲜期;Cache-Control(缓存控制) HTTP头信息;校验参数和校验;创建利于缓存网站的窍门;编写利于缓存的脚本;常见问题解答; 缓存机制的实现:Web服务器端配置; 缓存机制的实现:服务器端脚本;参考文档和深入阅读;关于本文档;
HTTP压缩对于纯文本内容可压缩至原大小的40%一下,从而提供60%以上的数据传输节约,虽然WEB服务器会因为压缩导致CPU占用的略微上升,但是可以节约大量用于传输的网络IO。对于数据压缩带来的用户浏览速度提升(让页面符合8秒定律),这点总体负载5%-10%上升是非常值得的。毕竟通过数据压缩会比通过不规范的HTML代码优化要方便得多。
内容摘要:
随着数码相机的普及,每次出游回来都会面对数量上百的照片整理,处理效率还是非常重要的因素。ACDSee
3.1(完整版)仍然是我目前最常用的照片查看/归档工具。以下是使用ACDSee进行照片整理和HTML相册生成的经验总结,大部分操作都可以完全只使
用键盘操作完成。
内容摘要: 在像网站首页这样的资源比较集中的页面中,那些栏目最经常被用户点击?居左居右对广告的点击率的影响是什么? &一切用数字说话&:以上问题都可以通过跟踪浏览器客户端的鼠标行为,按区块对页面进行点击行为的分析。
如果说新一代搜索引擎Google所依赖的PageRank技术更真实的突出了超链接(hyperlink)在互联网中互联互通的本质,大型门户网站是否也应该反思一下传统的广告投放/统计模式,也许让广告回归到最原始的静态链接形式,通过间接提升广告客户自身网站在大型搜索引擎中的排名这种模式也许更能突出大型门户网站自身的优势。
你完全不必耐心的看完后面所有的内容,因为结论无非以下一句话:
互联网上链接就是一切:来自其他网站相关主题的直接静态链接是唯一对提升自身站点在搜索引擎中的排名提升有长期作用的广告形式。
内容摘要:
拥有大量的历史积累的各种论坛系统中的内容往往很难被搜索引擎收录,BBS2BLOG是一个bbs改造思路:通过对现有BBS加入按“个人”的归档机制,
让这些丰富内容都可以成为整个可搜索互联网知识库的一部分。
内容摘要:
GNU很推崇“工具箱”哲学:很多复杂的问题都可以通过几个更简单的工具通过一定的组合加以解决的。
shell 脚本本身的一些变量:
$_ shell环境名称 如 /bin/
$0 shell脚本本身,如 test. $1 $2 ..$9 命令行参数 test.sh -a -b 的$1 = -a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!绝对不要远程调试防火墙配置!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
硬件需求:
&&& 双网卡
&&& 内存 & 64M
&&& 硬盘 & 1G
NAT网关本身效率都很高,所以即使在配置很低的机器上运行效率也是足够的(仍建议尽可能多的增加内存 & 256M),
如果需要记录日志做分析,则会产生很大的I/O操作并占用大量硬盘空间,建议使用SCSI硬盘并做日志轮循。
假设2块网卡分别按照以下网段设置:
内网网卡IP地址:192.168.0.1/255.255.255.0&&&&&&
本身为网关
外网网卡IP地址:111.222.111.222/255.255.255.192 网关:111.222.111.1
安全策略:
作为网关,安全性非常重要,建议除了远程登录用的SSH外,尽可能多的停掉所有不相关服务。
本安装文档只是最简单的配置,没有任何安全过滤规则,更多安全过滤规则需要根据实际情况补充。
内容摘要:
对于一个日访问量达到百万级的网站来说,速度很快就成为一个瓶颈。除了优化
内容发布系统的应用本身外,如果能把不需要实时更新的动态页面的输出结果转化成静态网页来发布,速度上的提升效果将是显著的,因为一个动态页面的速度往往
会比静态页面慢2-10倍,而静态网页的内容如果能被缓存
在内存里,访问。
HTTP_HOST/SERVER_NAME和REMOTE_ADDR/REMOTE_HOST需要用
HTTP_X_FORWARDED_HOST/HTTP_X_FORWARDED_SERVER代替
后台的内容管理系统的页面输出遵守可缓存的设计,这样就可以把性能问题交给前台的缓存服务器来解决了,从而大大简化CMS系统本身的复杂程度。
内容摘要:不得不承认,将动态网页链接rewriting成静态链接是最保险和稳定的面向搜索引擎优化方式
此外随着互联网上的内容以惊人速度的增长也越来越突出了搜索引擎的重要性,如果网站想更好地被搜索引擎收录,网站设计除了面向用户友好(User
Friendly)外,。进入搜索引擎的页面内容越多,则被用户用不同的关键词找到的几率越大。在Google的算法调查一文
中提到一个站点被Google索引页面的数量其实对PageRank也是有一定影响的。由于Google
突出的是整个网络中相对静态的部分(动态网页索引量比较小),链接地址相对固定的静态网页比较适合被Google索引(怪不得很多大网站的邮件列表归档和BLOG按日期归档的文档很容被搜的到),因此很多关于面向搜索引擎
URL设计优化(URI
Pretty)的文章中提到了很多利用一定机制将动态网页参数变成像静态网页的形式:
比如可以将:
内容摘要: 为Lucene做一个通用XML接口一直是我最大的心愿:更方便的在WEB应用中嵌入全文检索功能,2004年时类似应用还很不成熟,但现在也许应该优先试试全文应用引擎;
提供了XML的数据输入接口:适合将原有基于各种数据库的数据源导入到全文索引中,保证了数据源的平台无关性;
通过了基于XML的搜索结果输出:方便了通过XSLT进行前台的结果显示;
Oracle - DB
XML ==& (Lucene Index) ==& XML
\_________WebLucene__________/ 使用过程如下:
将数据用脚本导出成XML格式;
将XML数据源导入LUCENE索引;
从WEB界面得到XML结果输出,并通过XSLT生成HTML页面
内容摘要:你完全不必耐心地看完下面的所有内容,因为结论无非以下2点:
1 用 cronolog 干净,安全地轮循apache“日”志
2 用 sort -m 合并排序多个日志
根据个人的使用经历:
1 先介绍apache日志的合并方法;
2 然后根据由此引出的问题说明日志轮循的必要性和解决方法,介绍如何通过cronolog对apache日志进行轮循;
中间有很多在设计日志合并过程中一些相关工具的使用技巧和一些尝试的失败经历……
我相信解决以上问题的路径不止这一条途径,以下方案肯定不是最简便或者说成本最低的,希望能和大家有更多的交流。
你完全不必耐心看完所有内容:简要安装说明如下 安装 http://sourceforge.net/projects/awstats/ 下载安装包后: GNU/Linux:tar zxf awstats-version.tgz awstats的脚本和静态文件缺省都在wwwroot目录下:将cgi-bin目录下的文件都部署到 cgi-bin/目录下:/home/apache/cgi-bin/awstats/
mv awstats-version/wwwroot/cgi-bin /path/to/apache/cgi-bin/awstats 把图标等文件目录复制到WEB的HTML文件发布目录下,例如:/home/apache/htdocs/ 下发布
更多的批量更新脚本等在tools 目录下,可以一并放到cgi-bin/awstats/ 目录下 升级国内主要,安装GeoIP的应用库:C 解包,编译安装perl -MCPAN -e 'install &Geo::IP&' 或者使用纯Perl包& perl -MCPAN -e 'install &Geo::IP::PurePerl&'下载GeoIP/GeoIPCityLite包:解包并部署到awstats目录下:wget& wget&
配置 将缺省awstats.model.conf 命名成common.conf 修改其中的一些配置选项: LoadPlugin=&decodeutfkeys&LoadPlugin=&geoip GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoIP.dat&LoadPlugin=&geoip_city_maxmind GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoLiteCity.dat&
创建awstats下创建:data 目录用于统计数据输出,缺省的统计输出是按月汇总的;对于日志非常大的最好选择,并;$LIMITFLUSH =& 50000;&& # Nb of records in data arrays after how we need to flush data on disk可以有效提高统计的速度(减少磁盘IO),并避免按月汇总数据导致的统计文件过大;按照一下样例设置配置文件: Include &common.conf& LogFile=&/home/apache/logs/access_log.%YYYY-24%MM-24%DD-24& SiteDomain=&www.chedong.com& HostAliases=&chedong.com& DefaultFile=&index.html& DirData=&/home/apache/cgi-bin/awstats/data/&
内容摘要:
这里我很想把以前遇到类似问题时在Google上寻找资料的思路和大家分享一下:
内容摘要:
内容摘要:
ant是一个基于JAVA的自动化脚本引擎,脚本格式为XML。除了做JAVA编译相关任务外,ANT还可以通过插件实现很多应用的调用。
ANT的基本概念:
ANT的安装:解包,设置路径
ANT的使用:最好的学习只不过是一个简单实用的例子起步……
内容摘要:本文主要介绍一些小组开发环境搭建中经常会遇到一些服务器服务设置,这些服务很多都是鉴于大部分的开发客户端仍然是Windows设置
的,每个服务都提供了简单的基本配置示范。包括:
IP管理(DHCP):服务器IP地址的管理和解析(结合SAMBA的WINS服务),开发客户端的IP管理;
WEB服务(APACHE):文档共享,CVS的WEB界面浏览,论坛工具等;
FTP服务(FTP):用于文件下载/共享;
版本控制(CVS):程序源代码和文档的版本控制;
文件共享(SAMBA):基于NETBIOS的文件共享,方便WINDOWS客户端的访问(比如一些工具的安装等);
数据库服务器(MYSQL):一些应用的后台数据库服务;
备份机制(wget + rsync):备份
很多设置是缺省按照在bash环境中,在tcsh环境中,有一些设置不太一致。
服务器规划如下:
__________________
_______________
|APACHE WEB SERVER |
| File Backup |
|SAMBA SHARE
|DHCP SERVER
| DHCP Backup |
|CVS SERVER
| MySQL server|
|WIKI/BLOG SERVER
|Database backup
--------------------
---------------
硬件准备:至少要2台服务器
从理论上说,任何系统的崩溃只是时间问题,而且谁也不能保证开发者不犯错误;
解决以上问题的办法只有:备份,备份,备份……
内容摘要: 网站在搜索营销方面最主要的缺点:
行业知识:不知道搜索引擎对吸引的新用户的重要性,在搜索引擎排名服务中追求&傻瓜相关&,购买一些其实没有太多实际意义的行业关键词。其实能够用户输入的关键词越多,其目标性越强,这样的客户价值越高。用户能够直接定位到产品具体内容页比到网站首页有价值的多;
发布技术:网站的网页进入Google的索引量非常小,主要是由于大量使用动态网页造成的。需要将;
页面设计:页面标题重复,关键词不突出,过渡使用JavaScript脚本/图片/Flash等不适合搜索引擎索引的非文本形式;在用户友好(user friendly)方面和机器友好(robots friendly)之间的平衡;
而以上这些问题的根本原因还是网站自身缺乏造成:没有统计就无法看到并评估SEO对网站自身产生的巨大影响。
RedHat 7.3/8 下的Oracle 8i安装笔记
至少256M物理内存
redhat8按server方式安装需要增加的安装包大类:
1 包含一个X系统,建议使用GNOME,
2 将开发工具包DEVELOP TOOLS选上,标准的GCC工具等就有了。
3 建议将NETWORK UTILIETY选上,nmap mtr之类的小工具很有用
安装大约1.4G空间
安装后将语言环境设置缺省的en_US.UTF-8 (在RedHat 7.3下缺省是en_US.iso885915)改成en_US
root#vi /etc/sysconfig/i18n
LANG="en_US"
SUPPORTED="en_US:en"
介绍通过搜索引擎的一些隐含命令评价网站的“人气”。你完全不必耐心的看完后面所有的内容:因为他们已经过时了,提供了一个更加强大的反相链接统计工具:urlinfo
结果类似如下:Find to "www.chedong.com"
Find the term "www.chedong.com"Find under "www.chedong.com"
Discover who owns"chedong.com"
See how "www.chedong.com"used to look
将resin-version/contrib/init.resin.in复制到/etc/rc.d/init.d/resin
修改resin中的一些设置:JAVA_HOME RESIN_HOME USER 等
用/sbin/chkconfig resin on将RESIN服务在启动级别345设置成自启动
在慢速CPU的机器上启动时,需要加入一个15秒的延时帮助JAVA启动
Lucene是一个基于Java的全文索引工具包。
另外,如果是在选择全文引擎,现在也许是试试的时候了:相比Lucene速度更快,,而且内置了对简单的分布式检索的支持;
内容摘要:
Java对输入输入首先有一个“字节流”到“字符流”之间的编码/解码过程,这个设置是根据系统配置决定的,为什么PHP之类的应用很少有字符集问题而Java有很好的国际化机制,却经常出现乱码问题呢?
简单的举例:
有一个包含“你好”这2个中文字的文件实际上是4个字节组成的:C4 E3 BA C3
在英文操作系统中缺省的编码解码方式是缺省编码方式是ISO8859,所以直接从文件中读取的结果是4个的字节,按ISO8859解码后在程序中操作的是4个Java字符,虽然每个JAVA字符是16位Unicode,但每个字符仍是8位字节的映射\u00C4\u00E3\u00BA\u00C3,因此处理的仍是“英文”。而显示过程中,是浏览器将字节流正确的显示成了相应的中文。
而一个Java应用在GBK编码方式的操作系统中,直接从文件中读取4个的字节后,按GBK方式解码后是2个16位的Java字符\u4F60\u597D,每个字都是相应Unicode的CJK区块所对应的中文。
更多的例子请参考:
这也就是为什么在php等应用很少出字符集问题的原因:在服务器端环境缺省一般是英文(ISO8859-1),等于全部处理使用的都是按字节方式处理的。数据输入输出过程中编码方式完全不被改动,因此乱码问题很少出现。而Java实际上提供了把每个中文直接当成1个“字”而不是2个字节处理的机制,主要的乱码问题往往是输入输出时编码解码方式不一致造成的。而且通过Unicode机制,程序除了实现程序界面根据本地化的适应外,甚至程序处理的内容本身的在不同字符集的操作系统中也是可以通用的,比如:在繁体中文操作系统中编辑的内容,在简体中文操作系统中也能正常的查询。以下例子可能更说明问题:
:如何通过GNU/Linux系统的本地化设置让JAVA应用支持中文
:通过web.xml设置解决URLEncoder.encode()方法和系统缺省编码方式相关的问题
:说明如何将国际化和本地化应用到自己的应用设计中(UniCode
inside Localization outsite)
Google的XML数据格式定义:
其它一些关于XSLT的演示文档:
一个XSL教程,也是一个很好的XSLT在线手册:包括 XPATH XSLT函数参考和示例
Servlet应根据浏览器语言设置自动切换字符集配置
首先一个概念:即使是基于Java的WEB应用,在服务器和客户端之间传递的仍然是字节流,比如我从一个中文客户端的浏览器表单中提交“世界你好”这4个中文字到服务器时:首先浏览器按照GBK方式编码成字节流CA
C0 BD E7 C4 E3 BA
C3,然后8个字节按照URLEncoding的规范转成:%CA%C0%BD%E7%C4%E3%BA%C3,服务器端的Servlet接收到请求后应该按什么解码处理,输出时又应该按什么方式编码行字节流呢?
在目前的Servlet的规范中,如果不指定的话通过WEB提交时的输入ServletRequest和输出时的ServletResponse缺省都是ISO-8859-1方式编/码解码的(注意,这里的编码/解码方式是和操作系统环境中的语言环境是无关的)。因此,即使服务器操作系统的语言环境是中文,上面输入的请求仍然按英文解码成8个UNICODE字符,输出时仍按照英文再编码成8个字节,虽然这样在浏览器端如果设置是中文能够正确显示,但实际上读写的是“字节”,正确的方式是应该根据客户端浏览器设置ServletRequest和ServletResponse用相应语言的编码方式进行输入解码/输入编码,HelloUnicodeServlet.java就是这样一个监测客户端浏览器语言设置的例子:
试验2的一些结论:
所有的应用都是按照字节流=&字符流=&字节流方式进行的处理的:
byte_stream ==[input decoding]==& unicode_char_stream ==[output
encoding]==& byte_stream;
在Java字节流到字符流(或者反之)都是含有隐含的解码处理的(缺省是按照系统缺省编码方式);
最早的字节流解码过程从javac的代码编译就开始了;
Java中的字符character存储单位是双字节的UNICODE;
内容摘要:使用MySQL服务的一些经验,主要从以下几个方面考虑的MySQL服务规划设计。以下就是针对MySQL作为专门的数据库服务器的优化建议:
MySQL服务的安装/配置的通用性;
系统的升级和数据迁移方便性;
备份和系统快速恢复;
数据库应用的设计要点;
一次应用优化实战; 对于高负载站点来说PHP和MySQL运行在一起(或者说任何应用和数据库运行在一起的规划)都是性能最大的瓶颈,这样的设计有如让人一手画圆一手画方, 这样2个人的工作效率肯定不如让一个人专门画圆一个人专门画方效率高,让应用和数据库都跑在一台高性能服务器上说不定还不如跑在2台普通服务器上快。而将数据库和前端分离开以后: MySQL有上百的启动和运行参数选项,最主要的仍然是如何将后台的MySQL分布到多台服务器上,充分利用多台服务器的I/O和缓存就是最主要的问题了;
安心草 针对
我想请教一下有没有显示内容在文本中的行号的解决方案啊!我也遇到了相同的问题
xuanjinlee 针对
挺赞的文章,但是没有设计lucene的底层算法的介绍,这个是个缺陷吧,更偏向于应用的一篇好文章!
这个CVS有具体操作的讲解吗
看完你的java中文处理三篇,点起了很多疑问,弱弱的质疑一下,你是不是把encoding, decoding, 编码解码搞反了?由字符/图形/符号到数字码化的过程叫编码encoding,反之叫解码吧?
kellen 针对
最后还是给部署出来了,但是没装GeoIP,不怎么会装啊,
longfei.han 针对
你好,车东,我想请教一下有没有显示内容在文本中的行号的解决方案啊!
Michael 针对
如何对超大请求量PV, 超大Index数据量,应如何做分布式?
MARASYSTEMS 针对
楼主写的很细致,
来自德国的缓存设备单台设备可支持到1.5Gbps,命中率在50%-60%左右
更详细的信息,请访问HTTP://CACHE.MARASYSTEMS.ASIA
或HTTP://WEBCACHE.MARASYSTEMS.ASIA
alswl 针对
车东大大,这篇2002年的文章现在还能帮上我的忙。
很大很大数据量的全文搜索应该追寻一个什么样的原则呢
此 Blog 中的日记遵循以下授权 .
Powered by

我要回帖

更多关于 elk日志分析系统 的文章

 

随机推荐