码迷,mamicode.com
首页 > 其他好文 > 详细

ELK日志分析系统

时间:2018-04-04 20:51:55      阅读:422      评论:0      收藏:0      [点我收藏+]

标签:splay   效率   mes   read   res   日志分析系统   sleep   remove   命令行   

提示:先安装wget,执行yum  -y  install  wgetsudo  yum  install  wget

大纲:

一、简介

二、Logstash

三、Redis

四、Elasticsearch

五、Kinaba

 

一、简介

1、核心组成

ELKElasticsearchLogstashKibana三部分组件组成;

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

技术分享图片

提示:启动成功后,按2ctrl+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下面生成datalogs文件夹存数据文件和日志文件:

技术分享图片

注释:该datalogs文件的路径和目录由配置项的path.datapath.logs决定

 

访问ip:9200注意,如果本地访问不到linux服务器的9200,需让Linux服务器防火墙开启9200端口,或直接关闭防火墙,关闭防火墙命令

# service iptables stop

技术分享图片

访问ip:9200/_plugin/head查看ES集群状态:

技术分享图片

若要退出elasticsearch服务,在linuxctrl+c即可。

 

Linux(Centos)之安装Redis及注意事项

阅读目录

 

1.redis简单说明

  a.在前面我简单的说过redis封装成共用类的实现,地址如下:http://www.cnblogs.com/hanyinglong/p/Redis.html

  b.redis是一个key-value存储系统,它支持存储的value类型相比较Memcached更多,包括stringlistsetsetshashes(It supports data structures such as stringshasheslistssetssorted sets with range queriesbitmapshyperloglogs and geospatial indexes with radius queies)这些数据类型都支持push/popAdd/remove等丰富的操作,而且这些操作都是原子性的。

  c.redisMemcached一样,为了保证效率,数据都是缓存在内存中的,区别就是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.redisC语言实现的,所以在Linux系统中需要安装gcc来进行编译,安装gcc请参考第三步。

  d.接下来需要安装UnixTcl工具,如果不安装的话后期我们将无法对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中的daemonizeyes,确保守护进行开启,执行以下命令:

    b.1 cd usr/local/kencery/redis

    b.2 vim redis.conf  开启配置文件,找到daemonize属性酒设置为yes, 保存并且退出即可。

  c.然后设置开机启动,命令:chkconfig redis on

  d.当以上步骤完成之后,即可以可以重新启动Linux然后按照前面所写的测试是否随机器自动启动了。

 

参考网上配置logstashconsole取数据发送到elasticsearch

 

启动失败:

  技术分享图片

  测试发送消息失败:

  技术分享图片

  原因,网上给的配置里面确少protocol => "http":

  技术分享图片

  修改后再次启动成功,并发送测试消息:

   技术分享图片

  es查看:

  技术分享图片

  或

  技术分享图片

  安装kopf插件

  技术分享图片

Elasticsearch-kopf插件可以查询Elasticsearch中的数据

访问http://172.16.114.133:9200/_plugin/kopf/#!/cluster,浏览器访问kopf页面访问elasticsearch保存的数据:

技术分享图片

  logstash采集log4j的日志产生的日志并输出到es,网上的配置文件有误,可添加filter{}:

  技术分享图片

  启动成功:

  技术分享图片

  技术分享图片

  技术分享图片

  技术分享图片

四、Kibana

1、下载

  # wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz

2、解压

# tar zxf kibana-4.1.2-linux-x64.tar.gz -C /usr/local

3、修改kinaba配置文件kinaba.yml

# vim /usr/local/kibana-4.1.2-linux-x64/config/kibana.yml

将其中的elasticsearch_urllocalhost修改为elasticsearch服务器的ip

elasticsearch_url: "http://172.16.114.133:9200"

4、启动

# /usr/local/kibana-4.1.2-linux-x64/bin/kibana

技术分享图片

kinaba默认监听在本地的5601端口上

5、浏览器访问http://172.16.114.133:5601/#/settings/indices/?_g=()

技术分享图片

6、点击Create创建索引,使用默认的logstash-*的索引名称,并且是基于时间的,或使用指定的索引。

索引创建完成:

技术分享图片

7、点击上图的Discover,搜索和浏览Elasticsearch中的数据。

技术分享图片

技术分享图片

五、测试

1、新建一个javajava web项目,必须log4j的包,如log4j-1.2.17.jar

技术分享图片

2log4j.properties内容:

技术分享图片

3、生成日志

技术分享图片

4logstash采集log4j日志并输出到elasticsearch的配置文件log4j_to_es.conf

技术分享图片

5、以上面的配置文件启动logstash

技术分享图片

6、启动测试,产生日志

技术分享图片

7、从es查看日志消息,索引applog

技术分享图片

技术分享图片

8、从Kibana查看日志

8.1

技术分享图片

8.2

技术分享图片

8.3

技术分享图片

 

ELK日志分析系统

标签:splay   效率   mes   read   res   日志分析系统   sleep   remove   命令行   

原文地址:https://www.cnblogs.com/kibana/p/8718754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!