• ELK日志分析系统


    提示:先安装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

  • 相关阅读:
    MongoDB时间处理问题
    TextArea里Placeholder换行问题
    C# 文件与二进制流间的转换
    WPF图标旋转的动画
    ABP之本地化/多语言支持
    ABP之应用服务层Application
    ABP之创建实体
    关于Mapper not initialized的错误
    Request verb is GET. It should be Post(ABP使用api访问错误)
    在ABP模板工程中使用MySQL
  • 原文地址:https://www.cnblogs.com/kibana/p/8718754.html
Copyright © 2020-2023  润新知