ELK安装和实践

今年博主转战创业公司,随着系统的稳定和访问量的提升,急需一个在线的日志分析系统提供帮助,业界最知名的当属ELK了。架设这套体系的目的有三个:

1. 收集多台服务器上的日志信息,不需要上不同的服务器查看日志,方便分析处理问题。

2. 可视化界面方便搜索关键词和日志类型,处理潜在的bug。

3. 分析Nginx的访问量,是数据说话,让整个系统的运行情况了然于胸。
不多说了,直接切入正题

1. 安装Elasticsearch

下载最新的Elasticsearch tar包

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz

解压

tar zxvf elasticsearch-5.6.3.tar.gz

进入解压后目录

cd elasticsearch-5.6.3

如果想要设置其他服务器访问,需要修改配置,将network.host修改为本机的外网或内网ip地址,如果只要用127.0.0.1就略过

vim config/elasticsearch.yml

启动Elasticsearch

bin/elasticsearch -d

2. 安装Logstash

下载最新的logstash tar包

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz

解压

tar zxvf logstash-5.6.3.tar.gz

进入解压后目录

cd logstash-5.6.3

增加配置

vim config/logstash.conf

添加:

input {
        tcp {
                mode => "server"
                host => "localhost"
                port => 4567 
                codec => multiline {
                        pattern => "^\t"                                
                        what => "previous"
                }       
        }
}
filter {
        grok {
                match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{GREEDYDATA:thread}\] \[%{GREEDYDATA:id}\] \[%{GREEDYDATA:id2}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class}(\s-\s%{GREEDYDATA:info})?"}
        }
}
output {
        stdout { codec => rubydebug }
        elasticsearch {
                hosts  => "127.0.0.1:9200"
                index => "logstash-platform-%{+YYYY.MM.dd}"
        }
}

说明:以上的配置中input下的tcp是根据log4j里配置写的,在我们的JAVA工程里log4j的配置文件部分内容如下:

<Appenders>
    <!-- 日志输出到logstash -->
    <Socket name="LogStash" host="localhost" port="4567">
        <PatternLayout pattern="%d [%t] [%X{X-UUID}] [X-UID-%X{X-UID}] %-5level %logger - %msg%n" />
    </Socket>
</Appenders>
<Loggers>
    <Root level="DEBUG">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="LogStash"/>
    </Root>
</Loggers>

以上XML中的host和port就对应了logstash配置中的host和port。

codec的multiline的作用是为了将exception报错输出的内容合并到一行去,即如果是以制表符\t开头的一行输入内容都连接到上一行(previous)。

filter中的grok用与匹配输入的message并做文本的截取,这里面是正则表达式,大家可以到 http://grokdebug.herokuapp.com/ 调试自己的match规则。

output里面hosts就是elasticsearch的http地址,index是logstash在elasticsearch里面创建的索引的名字,它的默认值是”logstash-%{+YYYY.MM.dd}”,我把它配置成了”logstash-platform-%{+YYYY.MM.dd}”目的是跟nginx拉过来的日志做个区分。
如果有什么问题建议大家查阅logstash官方文档,很容易理解。

最后启动logstash

nohup bin/logstash -f config/logstash.conf & > /dev/null

3. 安装Kibana

下载最新的Kibana tar包

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-linux-x86_64.tar.gz

解压

tar zxvf kibana-5.6.3-linux-x86_64.tar.gz

进入解压后目录

cd kibana-5.6.3-linux-x86_64

修改配置,将elasticsearch.url改为上面安装的elasticsearch的地址

vim config/kibana.yml

启动kibana

nohup bin/kibana & > /dev/null

4. 给kibana增加登录认证

centos需要运行htpassword,先安装httpd-tools

sudo yum install -y httpd-tools

给admin这个用户设置密码

sudo htpasswd -c /data/nginx/.htpasswd admin

最后配置nginx反向代理,这里就不说了。
随着JAVA的工程启动,会忘logstash写入日志信息,这时候可以通过

curl -XGET 127.0.0.1:9200/_cat/indices

查看是否存在logstash-platform开头的索引生成。如果不正常,可以去logstash目录下的logs去查看什么原因。正常就打开Kibana,配置index pattern为logstash-platform*。

搞定后大家就可以自己去把玩Kibana发掘下它的牛逼之处了!

MySQL报错:1030 Got error 28 from storage engine

今天在工作的时候,MySQL一直报出代码为1030的错误:

1030 Got error 28 from storage engine

后来去查阅了下资料发现1030错误“28 from storage engine”的意思是没有足够的磁盘空间,去查看下系统的磁盘情况:

-> /root >df -h
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
                      141G  141G   0  100% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                1013M     0 1013M   0% /dev/shm
/dev/sdb2             459G  135G  301G  31% /data1

想办法把使用了100%的磁盘清理一下就可以了。

PragPro的哲学(之三)

足够好的软件

     正如Ed Yourdon在《IEEE软件》上的一篇文章描述的那样,你能够训练自己写出足够好的软件,对你的用户足够好,对未来的维护者足够好,让你自己足够安心。
     在我们更加深入之前,我们需要证明我们想说的是正确的。“足够好”没有包含马虎或者差劲的代码的意思。所有的系统必须满足它们用户的需求才能算得上成功。我们仅仅倡议给用户们一个机会参与到决定什么时候你做的东西是足够好的了的过程中来。

使你的用户参与到讨论中

     你开发的系统的范围和质量应该作为系统需求的一部分被指明。

建议7

使质量成为需求的一个议题

     你通常会在涉及到权衡的情况下。出人意料地,很多的用户相对于为多功能的版本等待一年更倾向于在今天使用有一些未完善处的软件。很多资金紧张的IT部门会赞同。现在好的软件常常是在接下来完善更可取。如果你给予你的用户更早使用一些东西,他们的反馈将会带给你更好且可能的解决方案。

不要画蛇添足

     在某种程度上,编程就像是画画。你从一个空白的画布和某些基本的未加工过的材料开始。你将科学、艺术和工艺相结合来决定你要对程序做什么。你草拟了整体形状,画出底层的环境,接着勾勒出细节。你时常带着批评的眼光回去看你都做了什么。所有的现在和以后你都将抛弃画布重新开始。
     但是艺术家会告诉你所有的努力工作都会因为你不知道什么时候停止而毁灭,就像画蛇添足。如果你添加一层又一层,细节加细节,油画会将在绘画中“迷失”。
     过度修饰或者过度精炼会毁掉一个足够好的软件。继续,让你的代码在正确的位置上一段时间。它或许不够好。不要担心,这永远不可能是完美的。

dll源代码调试全攻略~包括ISAPI,API HOOK,GINA等dll的源代码调试方法~

首先明白一点的是,只要有模块(exe,dll,sys等是模块)对应的正确符号文件,我们都可以使用代码去调试。

1:普通dll
首先写一个exe加载要调试的dll,下好断点后再按f5,会弹出一个框,让你输入调用该dll的程序,我们只要填入加载该dll的exe的路径即可。

或者在project->setting->debug里填入调用该dll的路径也是一样的。

2:com,activex控件。
和上述基本一致。如果是IE插件,那么就填入IE的路径。

3:shell扩展
这个需要注意一些问题:下面的话来自Windows Shell扩展编程完全指南(系统崩溃请找该文的作者,切勿来找我,谢谢)
当shell扩展被 Explorer调用后, 它会在内存中呆上一段时间, 这会使你无法重新编译并生成Shell扩展DLL文件.

要让 Explorer 更迅速地卸载Shell扩展执行文件,需要创建如下注册表项:
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AlwaysUnloadDLL
并将其值设为 “1”. 对于Win9x, 这是你能做的最好的方法。

而在Win NT/2000上, 你可以找到如下键:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
并创建一个名为DesktopProcess的DWORD值 1. 这会使桌面和任务栏运行在同一个进程中, 而其他每一个 Explorer 窗口都运行在它自己的每一个进程内. 也就是说,你可以在单个的Explorer 窗口内进行调试, 而后只要你关闭该窗口,你的DLL就会被马上卸载, 这就避免了因为DLL正被Windows使用而无法替换更新. 而如果不幸出现这种情况,你就不得不注销登录后再重新登录进Windows从而强制卸载使用中的Shell扩展DLL.

———–
完成上面的任务后,和普通DLL那样调试,不过要选择系统目录里面的explorer.exe

4:ISAPI DLL
建议使用vs2003以及以上版本的vc。
MFC ISAPI都有一个全局类,命名为C+工程名+Extension
在此类的构造函数的第一行之前加上下面三行代码的其中一行
1:)MessageBox(NULL,”Please debug me!”,”Debug”,MB_OK|MB_SERVICE_NOTIFICATION);
2:)DebugBreak();
3:)_asm int 3
然后在生成目录的文件夹上点右键,以debug为例,选择”共享与安全”,在web共享里面选择”共享“该文件夹,权限设置为”执行“最后点确定。
运行IIS,在浏览器里面输入http://127.0.0.1/debug/isapi的名字(如testisapi.dll,如果需要输入密码则运行inetmgr,找到debug虚拟目录,点属性,然后勾选匿名访问。
这时会弹出一个对话框,先别点确定,回到vs2003中,在要调试的地方下好断点,然后在任务管理器中找到用户名为IWAM_XX的DLLHOST的进程ID,然后在vs2003菜单中选择调试->进程->选择刚才找到的进程ID,然后点附加,再点刚才弹出的框的确定(如果使用2或者3则点取消),然后程序就会停在断点下了,如果没停则是没下好断点,或者RPWT。

5:消息钩子
这个简单啊。。都不想再说了,假设写了个键盘钩子,需要勾住计算器的击键操作。先下好断点,在vs2003菜单中选择调试->进程->选择计算器,点附件按钮,最后在计算器上击键,程序就会停在断点处。

6:API HOOK
如果是注入到别的进程的API HOOK,那么调试方法和消息钩子一样。挂钩本进程,则直接启动调试。。。实在太简单了。

7:GINA
这个稍微繁琐。方法多种多样。
1:)参考下面的文章
如何在单个计算机上调试 GINA DLL
http://support.microsoft.com/kb/260901/zh-cn
How to debug a GINA DLL on a single computer
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q260901
2::)用NTSD调试,修改下面注册表,(来自MSDN,不行请找微软)
HKEY_LOCAL_MACHINE
Software
Microsoft
Windows NT
CurrentVersion
Image File Execution Options
winlogon.exe
Debugger = ntsd -d
3:)双机kernel windbg与user ntsd联合调试,在vm里面设置系统以调试方式启动,然后在目标系统的注册表加上
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\WinLogon.EXE\Debugger

ntsd -d -x -g

,然后重新启动vm里面的系统,选择调试方式启动,然后开启windbg,选择内核调试,连接上系统。等啊等,winlogon会被ntsd中断,并且反映到windbg里面,这时是打开代码下断点的好机会。这个就是所谓的kernel windbg与user ntsd联合调试。

———-
8:其它调试方式
使用TRACE宏把信息输出到dbgview上。这个方便,并且不干扰程序的执行。

该文章转自CSDN!

WordPress撰写文章SEO关键词自动生成插件工具下载(1.3版本)

提示:All in One SEO这个插件如果有更新请大家不要点自动更新,否则本插件将被覆盖。

点击下面的链接完成下载:

SEO关键词自动生成插件 (539)

下载该插件的zip文件之后,然后到你的wordpress后台->插件->安装插件->上传,选择all-in-one-seo-pack.zip,点击现在安装。

注:系统生成的关键词仅供参考

1.3 描述

整合了最新版的All in One SEO 1.6.15.3

1.2 版本描述

整合了最新版的All in One SEO 1.6.15.2

修改编码格式的问题

可同时生成标签

修改了无法生成关键词的问题

1.1版本描述

修改中文词典的错误

修改了无法安装的bug

修改了路径的bug

1.0版本描述

WordPress撰写文章SEO关键词自动生成插件是由www.tonitech.com的站长Tony基于Semper Fi Web Design的Michael Torbert开发的All in One SEO进行了修改,添加了新建文章中关键词生成工具完成了开发。安装了此插件,你在写文章的时候底部会出现All in One SEO Pack,Keywords的输入框后面有一个“自动生成关键词”按钮,你只需要点击这个按钮,系统就会根据中文分词算法,按照词频自动生成这篇文章的8个关键词。