ELK日志分析系统
Posted 发挥哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK日志分析系统相关的知识,希望对你有一定的参考价值。
提示:先安装wget,执行yum -y install wget或sudo yum install wget
大纲:
一、简介
二、Logstash
三、Redis
四、Elasticsearch
五、Kinaba
一、简介
1、核心组成
ELK由Elasticsearch、Logstash和Kibana三部分组件组成;
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
2、四大组件
Logstash: logstash server端用来搜集日志;
Elasticsearch: 存储各类日志;
Kibana: web化接口用作查寻和可视化日志;
Logstash Forwarder: logstash client端用来通过lumberjack 网络协议发送日志到logstash server;
3、ELK工作流程
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
4、ELK的帮助手册
ELK官网:https://www.elastic.co/
ELK官网文档:https://www.elastic.co/guide/index.html
ELK中文手册:http://kibana.logstash.es/content/elasticsearch/monitor/logging.html
提示:
ELK有两种安装方式:
(1)集成环境:Logstash有一个集成包,里面包括了其全套的三个组件;也就是安装一个集成包。
(2)独立环境:三个组件分别单独安装、运行、各司其职。(比较常用)
本实验以第二种方式独立环境来进行演示;单机版主机地址为:192.168.1.104。
二、Logstash
1、Logstash的运行依赖于Java运行环境,安装jdk(采用yum安装jdk不需手动配置环境变量):
# yum -y install java-1.8.0
# java -version
输出jdk版本信息:
Openjdk version "1.8.0_51"
OpenJDK Runtime Environment (build 1.8.0_51-b16)
OpenJDK 64-Bit Server VM (build 25.51-b03, mixed mode)
2、安装logstash:
# wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
# tar zxf logstash-1.5.4.tar.gz -C /usr/local
3、配置logstash环境变量:
# echo "export PATH=\\$PATH:/usr/local/logstash-1.5.4/bin" > /etc/profile.d/logstash.sh
# . /etc/profile
4、logstash常用参数:
e:指定logstash的配置信息,可以用于快速测试;
f:指定logstash的配置信息,可以用于生产测试;
5、启动logstash:
5.1 通过-e参数指定logstash的配置信息,用于快速测试,直接输出到屏幕。
# logstash -e "input {stdin{}} output {stdout{}}"
启动成功显示:Logstash startup completed
输入hello logstash. //手动输入后回车,等待10秒后会有返回结果:
2015-10-08T13::55:50.660Z 0.0.0 hello logstash. //这种输出是直接原封不动的返回
5.2 通过-e参数指定logstash的配置信息,用于快速测试,以json格式输出到屏幕。
# logstash -e \'input {stdin{}} output {stdout {codec=>rubydebug}}\'
启动成功显示:Logstash startup completed
输入hello logstash. //手动输入后回车,等待10秒后会有返回结果:
{
"message" => " hello logstash.",
"@version" => "1",
"@timestamp" => "2015-10-08T13:57:31.851Z",
"host" => "0.0.0.0"
}
这种输出是以json格式的返回。
6、logstash以配置文件方式启动:
6.1 输出信息到屏幕:
编辑配置文件
# vim logstash-simple.conf
input { stdin {} }
output {
stdout { codec=>rubydebug }
}
普通方式启动
# logstash -f logstash-simple.conf
启动成功显示:Logstash startup comleted
开启debug模式启动
# logstash agent -f logstash-simple.conf --verbose
启动成功显示:
Pipeline started {:leave=>:info}
Logstash startup comleted
测试:效果同5.命令行配置参数一样。
7.启动成功,查看logstash的监听端口号(默认4567端口):
# netstat -tunlp|grep java
提示:启动成功后,按2次ctrl+c退出
8.刚才将信息直接显示在屏幕上,现在将logstash输出信息存储到redis数据库中:
编辑配置文件
# vim logstash_to_redis.conf
input { stdin{} }
output {
stdout { codec => rubydebug }
redis {
host => \'172.16.114.133\'
data_type => \'list\'
key => \'logstash:redis\'
}
}
其中,input是从控制台输入,output输出到redis,host是redis服务器ip,data_type是json格式的list,每一条json格式日志信息都加入到list,list的键由key决定,在redis的客户端redis-cli下输入命令keys *可查看所有键,redis中查看list内容的命令是lrange 键 起始索引(0开始) 条数。
以该配置文件启动Logstash:
# logstash agent -f logstash_to_redis.conf --verbose
启动成功后,在控制台输入日志信息进行测试,如果未安装redis或出现如下异常:
提示:
解決 centos中-bash: vim: command not found
用centos 的主机的時候, 用 vim 时出现 -bash: vim: command not found. 只能使用 vi. 那么如何安裝 vim 呢?
输入 rpm -qa|grep vim 命令, 如果 vim 已经正确安装,会返回下面的三行代码:
[root@centos]# rpm -qa |grep vim
vim-minimal-7.0.109-6.el5
vim-common-7.0.109-7.2.el5
vim-enhanced-7.0.109-7.2.el5
如果少了其中的某一条,比如 vim-enhanced 的,就用命令 yum -y install vim-enhanced 来安装:
yum -y install vim-enhanced
如果上面的三条都沒有返回, 可以直接用 yum -y install vim* 命令
yum -y install vim*
三、ElasticSearch
0、下载elasticsearch需用wget(Linux的下载工具),若未安装wget,执行如下命令:
# yum -y install wget或# sudo yum install wget
安装过程中提示y/n时,输入y即可,直到出现complete!则安装成功。
1、下载
# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.tar.gz
2、解压
# tar zxf elasticsearch-1.7.2.tar.gz -C /usr/local/
3、修改配置项:
# cd /usr/local/elasticsearch
# vi config/elasticsearch.yml
配置内容(后面有解释):
cluster.name: es_cluster
node.name: elk
path.data: /tmp/elasticsearch/data
path.logs: /tmp/elasticsearch/logs
network.host: 172.16.114.133
network.port: 9200
因为elasticsearch安装完成以后elasticsearch.yml里的配置项都是注释过的,所以直接在文件底部插入以上配置内容即可,效果如下:(切记配置名后面是冒号,后面有空格,然后才是配置值,如果冒号后面没有空格,elasticsearch会抛异常,提示无法加载配置文件),配置好后保存:
可从浏览器访问elasticsearch服务,但需要安装head插件,这是一个用浏览器与es集群交互的插件,可以查看集群状态,集群doc内容,执行搜索和普通的rest请求等,安装过程如下:
在elasticsearch-1.7.2文件夹下执行命令
# ./bin/plugin install mobz/elasticsearch-head
配置正确,安装完head插件,启动elasticsearch服务:
在elasticsearch-1.7.2文件夹下执行命令
# ./bin/elasticsearch
上图为启动信息,注意其中的transport,启用了9300端口与其它节点传输数据,启用9200端口接受http请求,可从浏览器通过ip:9200访问。
注意:若配置项的冒号后面没空格,安装插件时抛异常如下,提示没法从配置文件加载配置:
注意:如果启动时抛如下异常,即不认识的主机名,需要配置hosts文件:
# vi /etc/hosts
在最后添加一行,将本机IP和主机名进行映射:
启动完成后,会在/tmp/elasticsearch下面生成data和logs文件夹存数据文件和日志文件:
注释:该data和logs文件的路径和目录由配置项的path.data和path.logs决定
访问ip:9200,注意,如果本地访问不到linux服务器的9200,需让Linux服务器防火墙开启9200端口,或直接关闭防火墙,关闭防火墙命令
# service iptables stop
访问ip:9200/_plugin/head查看ES集群状态:
若要退出elasticsearch服务,在linux按ctrl+c即可。
Linux(Centos)之安装Redis及注意事项
阅读目录
- 1.redis简单说明
- 2.准备工作
- 3.gcc的安装
- 4.Tcl的安装
- 5.redis的安装
- 6.redis的测试
- 7.Linux中设置redis的服务器启动和关闭
- 8.Linux中设置redis的开机启动
1.redis简单说明
a.在前面我简单的说过redis封装成共用类的实现,地址如下:http://www.cnblogs.com/hanyinglong/p/Redis.html。
b.redis是一个key-value存储系统,它支持存储的value类型相比较Memcached更多,包括string,list,set,sets,hashes等(It supports data structures such as strings,hashes,lists,sets,sorted sets with range queries,bitmaps,hyperloglogs and geospatial indexes with radius queies)这些数据类型都支持push/pop,Add/remove等丰富的操作,而且这些操作都是原子性的。
c.redis和Memcached一样,为了保证效率,数据都是缓存在内存中的,区别就是redis会周期性的将更新的数据写入磁盘,并且可以实现主从(master-slave)同步。
d.redis在数据存储方面,采用了NoSql数据库的思想,即将Key作为数据检索的唯一标示,可以将其简单的理解为关系型数据库中索引的键,而value则作为数据存储的主要对象,其中每一个Value都有一个Key与之对应,在Redis中,Value将被视为二进制字节流用于存储任何格式的数据,如Json,XML,图片和序列化对象的字节流等,因此我们也可以将其想象为RDB中的Blob类型字段,从而在我们进行数据查询是,只能基于Key作为我们查询的条件。
e.redis官网:http://www.redis.io/
2.准备工作
a.通过上面的说明之后我们既可以开始在linux系统下面安装redis了,在安装redis的过程中我遇到了一些问题,但也全部解决了,本来我想直接写然后遇到错误在引出来需要安装什么,但是感觉不太好写,所以我还是在前面将这些软件准备好,大家安装的时候可以先去安装redis去验证会不会出现问题,在解决也行。
b.下载redis的包,下载地址:http://download.redis.io/releases/redis-3.0.5.tar.gz
c.redis是C语言实现的,所以在Linux系统中需要安装gcc来进行编译,安装gcc请参考第三步。
d.接下来需要安装Unix的Tcl工具,如果不安装的话后期我们将无法对Redis进行测试,完成安装之后make test会报错,安装tcl请参考第4步,tcl包的下载地址是:http://downloads.sourceforge.net/tcl/tcl8.6.3-src.tar.gz
e.安装完成上面的几个必须的包之后,即可以安装redis,请参考第5步之后。
f.操作需要的软件以及系统如下:虚拟机(Vmware),虚拟机中安装的Centos系统,Xshell,Xftp,redis包,tcl包。
3.gcc的安装
a.通过上面准备工作之后,我们现在已经拥有了可以安装和发布的环境,如果没有,请自行查询安装。
b.在centos下面安装gcc,我们使用yum(包管理器)安装,因为gcc依赖了很多东西,而有些包系统可能已经安装了,有些没有,所以下面的命令最后都执行一遍,在Xshell中执行下面的命令:
b.1 yum install cpp
b.2 yum install binutils
b.3 yum install glibc-kernheaders
b.4 yum install glibc-common
b.5 yum install glibc-devel
b.6 yum install gcc
b.7 yum install make
备注:以上所有的包信息在安装完成的时候都会提示Complete,如果没有是Complete,而是Nothing to do,则说明服务器已经安装了这个包,不需要再次安装,所以没关系,继续执行下一个命令即可。
c.如果安装过程中没有报错,则说明gcc的安装已经完成了,下面继续安装tcl。
4.Tcl的安装
a.在Xshell中使用命令跳转到local下面创建属于自己的文件夹:kencery
a.1 cd usr/local/ mkdir kencery cd kencery/
b. 然后使用Xftp将在准备工作下载的tcl包复制到kencery文件夹下面,如图所示:
c.将上传的tcl包解压,解压之后重命名为tcl,如图所示
c.1 tar -zxvf tcl8.6.3-src.tar.gz
c.2 mv tcl8.6.3 tcl
c.3 cd tcl
d.解压完成之后使用下面的命令安装,命令执行顺序按照我写的即可。
d.1 cd unix/
d.2 ./configure
d.3 make
d.4 make install
e.在执行的过程中如果不出现错误,耐心等待即可,这些命令的截图就不放在这里了,按照我写的顺序执行即可。
5.redis的安装
a.通过上面几步之后,准备工作已经完成,即可以开始安装redis了。
b.使用Xftp将在准备工作下下载的redis包复制到kencery文件夹下面,如图所示:
c.将上传的redis包解压,解压之后重命名为redis,如图所示:
c.1 tar -zxvf redis-3.0.5.tar.gz
c.2 mv redis-3.0.5 redis
c.3 cd redis
d.当对包解压完成之后,便可以开始对其进行安装了,安装的命令为(在redis目录下执行):
d.1 make
(1) 在练习的时候输入make出现错误了,但是现在写博客的时候部署没有出现错误,如果出现错误,请使用这个命令(make MALLOC=libc)即可执行,因为没有出现错误,所以没有截图,大家如果遇到的话给我截图留言,谢谢。
(2) 如果执行make出现错误,当再次执行make的话,我们建议,清理一下在执行,命令为:make clean。
d.2 cd src/ make test
(1)在执行完make之后,在最后的程序中会输出(t\'s a good idea to run \'make test\'),它建议我们执行make test进行测试,那么接下来我们就输入make test,检查测试,是否出现问题,如出现如图所示:则说明测试没有问题:
(2)在输入make test执行的时候我在练习的时候是会出现错误的,但是这个错误不影响我们的测试,故而可以忽略。
d.3 make install
最后执行make install,不出现错误的话则说明redis安装成功,如图所示:
6.redis的测试
a.当安装完redis之后,就需要进行测试,以下简单做一个测试来验证我们的redis是否安装成功。
b.首先我们启动redis服务,启动和关闭redis服务命令如下:
b.1 src/redis-server & 启动redis,加上&表示使redis以后台程序方式运行
b.2 redis-server /usr/local/kencery/redis/redis.conf 启动redis
b.3 src/redis-cli shutdown 关闭redis
b.4 输入启动redis的命令,启动redis,如图所示:
b.5 当redis启动完成之后,使用netstat -ntlp |grep 6379 查看端口是否在使用中,如果在使用中,则说明安装成功,否则安装没有成功。
b.6 连接redis并且测试,连接命令为:src/redis-cli,最后的测试结果如图所示:
b.7 到这里reids的安装和测试工作全部完成了。
7.Linux中设置redis的服务器启动和关闭
a.如上面所述,我们已经完成了对redis的安装,接下来就可以按照上面的方法使用,但是这里还存在一些小问题,那就是linux系统重启之后都需要找到安装路径才能执行启动命令,那么我们可以设置按照service的形式来启动redis吗?
b.执行命令:vim /etc/init.d/redis,创建脚本文件,在文件中写入如下代码,保存并且退出:
1 # Date 2015-12-10
2 # chkconfig: 2345 10 90
3 # description: Start and Stop redis
4
5 PATH=/usr/local/kencery/redis/src:/sbin:/usr/bin:/bin
6 REDISPORT=6379
7 EXEC=/usr/local/kencery/redis/src/redis-server
8 REDIS_CLI=/usr/local/kencery/redis/src/redis-cli
9
10 PIDFILE=/var/run/redis.pid
11 CONF="/usr/local/kencery/redis/redis.conf"
12 AUTH="1234"
13 case "$1" in
14 start)
15 if [ -f $PIDFILE ]
16 then
17 echo "$PIDFILE exists, process is already running or crashed."
18 else
19 echo "Starting Redis server..."
20 $EXEC $CONF
21 fi
22 if [ "$?"="0" ]
23 then
24 echo "Redis is running..."
25 fi
26 ;;
27 stop)
28 if [-f $PIDFILE ]
29 then
30 echo "$PIDFILE exists, process is not running."
31 else
32 PID=$(cat $PIDFILE)
33 echo "Stopping..."
34 $REDIS_CLI -p $REDISPORT SHUTDOWN
35 sleep 2
36 while [ -x $PIDFILE ]
37 do
38 echo "Waiting for Redis to shutdown..."
39 sleep 1
40 done
41 echo "Redis stopped"
42 fi
43 ;;
44 restart|force-reload)
45 ${0} stop
46 ${0} start
47 ;;
48 *)
49 echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
50 exit 1
51 esac
c.给文件添加权限,使用脚本文件可以执行,命令为:chmod 755 /etc/init.d/redis
d.以上工作顺利完成并且没有出现报错,则配置完成,每次我们开机之后都可以输入以下两个命令启动和关闭redis服务,如图所示:
d.1 service redis start 开启redis服务
d.2 service redis stop 关闭redis服务
f.当开启服务之后既可以连接redis测试进行操作或者使用其他客户端来操作redis,测试如图所示:
8.Linux中设置redis的开机启动
a.在大部分情况下,我们需要服务器重新启动的时候自动开启redis,而不是我们手工的去开启,那么下来就说一下开机自动启动的设置。
b.首先设置redis.config中的daemonize为yes,确保守护进行开启,执行以下命令:
b.1 cd usr/local/kencery/redis
b.2 vim redis.conf 开启配置文件,找到daemonize属性酒设置为yes, 保存并且退出即可。
c.然后设置开机启动,命令:chkconfig redis on
d.当以上步骤完成之后,即可以可以重新启动Linux然后按照前面所写的测试是否随机器自动启动了。
参考网上配置logstash从console取数据发送到elasticsearch:
启动失败:
测试发送消息失败:
原因,网上给的配置里面确少protocol => "http":
修改后再次启动成功,并发送测试消息:
在es查看:
或
安装kopf插件
Elasticsearch-kopf插件可以查询Elasticsearch中的数据
访问http://172.16.114.133:9200/_plugin/kopf/#!/cluster,浏览器访问kopf页面访问elasticsearch保存的数据:
logstash采集log4j的日志产生的日志并输出到ELK日志分析系统(实例!!!)