Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1829683
  • 博文数量: 636
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3950
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-06 21:58
个人简介

博客是我工作的好帮手,遇到困难就来博客找资料

文章分类

全部博文(636)

文章存档

2024年(5)

2022年(2)

2021年(4)

2020年(40)

2019年(4)

2018年(78)

2017年(213)

2016年(41)

2015年(183)

2014年(66)

我的朋友

分类: 系统运维

2017-03-23 22:11:22

开源实时日志分析 ELK , ELK 由 ElasticSearch 、 Logstash 和 Kiabana 三个开源工具组成。官方网站:


其中的3个软件是:


   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。


   Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。


   kibana 也是一个开源和免费的工具,他 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志 




系统 系统需要安装的软件 ip 描述
centos6.4 Elasticsearch/test5 192.168.48.133 搜索存储日志
centos6.4 Elasticsearch/test4 192.168.48.131 搜索存储日志
centos6.4 Logstash/nginx/test1 192.168.48.129  用来收集日志给上面
centos6.4 kibana,nginx/test2 192.168.48.130 用来后端的展示

wKiom1d5AXqAuTzcAAEsUfMlZRg070.png

一、先安装elasticsearch集群,并测试通过再进行其他软件安装。

  在test5,test4上安装分别安装elasticsearch-2.3.3.rpm  前提要安装java1.8 步骤如下: 


             yum remove java-1.7.0-openjdk

             rpm -ivh jdk-8u91-linux-x64.rpm

             yum localinstall elasticsearch-2.3.3.rpm



   配置elasticsearch  在目录/etc/elasticsearch目录下面  


   lasticsearch.yml  elasticsearch.yml.bak  logging.yml  scripts


   编辑 vim  lasticsearch.yml


   修改如下配置

   

   cluster.name: myelk  #设置集群的名称,在一个集群里面都是这个名称,必须相同


   node.name: test5     #设置每一个节点的名,每个节点的名称必须不一样。


   path.data: /path/to/data    #指定数据的存放位置,线上的机器这个要放到单一的大分区里面。


   path.logs: /path/to/logs    #日志的目录


   bootstrap.mlockall: true  #启动最优内存配置,启动就分配了足够的内存,性能会好很多,测试我就不启动了。


   network.host: 0.0.0.0   #监听的ip地址,这个表示所有的地址。


   http.port: 9200       #监听的端口号


   discovery.zen.ping.unicast.hosts: ["192.168.48.133", "192.168.48.131"]   #知道集群的ip有那些,没有集群就会出现就一台工作



两台的配置都一样就是上面的IP和note名称要配置不一样就行


安装插件 head和kopf 之后访问 ip:9200/_plugin/head   和ip:9200/_plugin/kopf  (插件可以图形查看elasticsearch的状态和删除创建索引)


/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf


/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head



二、安装nginx和logstash软件


在test1上安装好nginx服务 就是收集它的日志呢


yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel


./configure --prefix=/usr/local/nginx   --with-pcre  --with-openssl= --with-zlib=


make && make install


日志在/usr/local/nginx/logs/access.log



然后在test1上安装logstash-2.3.3-1.noarch.rpm


yum remove java-1.7.0-openjdk

rpm -ivh jdk-8u91-linux-x64.rpm

rpm -ivh logstash-2.3.3-1.noarch.rpm  


/etc/init.d/logstash start  #启动服务


/opt/logstash/bin/logstash -e "input {stdin{}} output{stdout{ codec=>"rubydebug"}}"  


#检测环境  执行这个命令检测环境正常否,启动完成后 直接输入东西就会出现之后输入


 /opt/logstash/bin/logstash -e 'input {stdin{}} output{ elasticsearch { hosts => ["192.168.48.131:9200"] index => "test"}}'  


就是输入东西到48.131的elasticsearch上 会在/path/to/data/myelk/nodes/0/indices 生成你名称test索引文件目录 可以多输入几个到48.131的目录看看有没有文件有就证明正常。


之后在/etc/logstash/conf.d 建立以.conf结尾的配置文件,我收集nginx就叫nginx.conf了内容如下;

###########################################################################################

input {

  file {

    type => "accesslog"

    path => "/usr/local/nginx/logs/access.log"   #日志的位置

    start_position => "beginning"  #日志收集文件,默认end

   }

}


output {

  if [type] == "accesslog" {

    elasticsearch  {

        hosts => ["192.168.0.87"]   ###elasticearch的地址

        index => "nginx-access-%{+YYYY.MM.dd}" #生成的索引和刚才的test一样会在那里生成后面的是日期变量。

                 }

       }

      }

##########################################################################################

一定要仔细,之后运行/etc/init.d/logstash configtest检测配置是否正常。



之后在elasticearch查看有没有索引生成。多访问下nginx服务


如果没有就修改这个文件


vi /etc/init.d/logstash

######################################################################################################

LS_USER=root    ###把这里换成root或者把访问的日志加个权限可以让logstash可以读取它 重启服务就会生成索引了

LS_GROUP=root

LS_HOME=/var/lib/logstash

LS_HEAP_SIZE="1g"

LS_LOG_DIR=/var/log/logstash

LS_LOG_FILE="${LS_LOG_DIR}/$name.log"

LS_CONF_DIR=/etc/logstash/conf.d

LS_OPEN_FILES=16384

LS_NICE=19

KILL_ON_STOP_TIMEOUT=${KILL_ON_STOP_TIMEOUT-0} #default value is zero to this variable but could be updated by user request

LS_OPTS=""

#######################################################################################################



三、安装kibana软件

上面的都安装完成后在test2上面安装kibana


rpm -ivh kibana-4.5.1-1.x86_64.rpm


编辑配置文件在这里/opt/kibana/config/kibana.yml 就修改下面几项就行

#######################################################################################################

server.port: 5601   端口

server.host: "0.0.0.0"   监听

elasticsearch.url: "" elasticsearch地址

######################################################################################################



四、其他的一些配置。


kibana是直接访问的比较不安全,我们需要用nginx访问代理,并设置权限用户名和密码访问


先在kibana服务器上安装nginx 不介绍了

在nginx里面配置

#################################################################################

server

     {

            listen             80;

            server_name    localhost;

            auth_basic "Restricted Access";

            auth_basic_user_file /usr/local/nginx/conf/htpasswd.users;  #密码和用户


         location / {

             proxy_pass      #代理kibana的5601之后就可以直接80访问了

             proxy_set_header Host $host;

             proxy_set_header X-Real-IP $remote_addr;

             proxy_set_header REMOTE-HOST $remote_addr;

             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

             

            }

}

####################################################################################

创建密码和用户文件:htpasswd.users  

需要安装httpd-tool包先安装它


 htpasswd -bc /usr/local/nginx/conf/htpasswd.users  admin  paswdadmin  


 #前面是用户后面是密码


##################################################################################




一、基本操作

1、命令行运行  bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'


#bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

 

Logstash startup completed

hello world

{

       "message" => "hello world",

      "@version" => "1",

    "@timestamp" => "2017-03-22T01:34:46.013Z",

          "host" => "0.0.0.0"

}

2、加载配置文件运行 bin/logstash -f log.conf 


input {

  stdin { }

}

 

output {

  stdout {

    codec => rubydebug {}

  }

  elasticsearch {

    embedded => true

  }

}

3、语法

  a、区段

logstash 用{} 定义区域,区域内可以包括插件区域定义,一个区域内可以定义多个插件 如:


input {

    stdin { }

    syslg { }

}

  b、数据类型

支持字符串、数值、数组、哈希


二、命令行参数

1、-e “执行”参数的默认值:


input {

    stdin { }

}

output {

    stdout { }

}

2、--config 或-f : 用来指定启动加载的配置文件


bin/logstash -f log.conf (读取单个配置文件)

bin/logstash -f /etclogstash.d/ (读取目录下所有的配置文件)


3、--configtest 或-t : 测试配置文件是否能正常解析,如果错误,会有提示


./bin/logstash -t  -f filebeat20170109.conf 


4、--log 或-l: 用于指定输出日志(logstash默认输出日志到标准错误)


bin/logstash -l /tmp/logstash.log


5、--filterworkers 或 -w :指定工作线程


bin/logstash -w 5


6、--pluginpath 或-P 指定插件


7、--verbose 输出一定的调试日志


8、--debug 输出更多的调试日志


三、插件

列出 bin/plugin list


安装 bin/plugin install logstash-output-webhdfs


升级 bin/plugin update logstash-input-tcp


四、启动方式 nohup bin/logstash -f log.conf &


建议启动方式 daemontools,如supervisord  


一、输入

a、标准输入:


input {

    stdin {

        add_field => {"key" =>"value"}

        codec =>"plain"

        tags => ["add"]

        type => "std"

    }

}

 

output {

  stdout { 

    codec => rubydebug {}

  }

}

其中tags和type 是logstash中两个特殊字段。type 一般用来指定事件类型,tags是在数据处理过程中,由具体的插件来添加或删除。


b、文件输入

logstash 使用FileWatch的ruby gem库来监听文件变化,支持glob展开文件路径


FileWatch只支持文件的绝对路径而且不会自动递归目录,但可以用**来缩写表示递归全部子目录

/path/to/**/*.log


input {

    file {

       path => "/var/log/messages"

       type => "syslog"

         }

 

    file {

     path => "/var/log/httpd/access_log"

    type => "apache_log"

}

}

filter {

  if [type] == "syslog" {

    grok {

      match => [ "message", "%{SYSLOGBASE} %{GREEDYDATA:message}" ]

      overwrite => [ "message" ]

        }

     } 

  else if [type] == "apache_log" {

          grok {

            match => ["message", "%{COMMONAPACHELOG}"]

    }

    }

  }

output {

      stdout { codec => rubydebug }

      elasticsearch { embedded => "true"}

}


c、TCP输入,最常见的是配合nc命令导入旧数据  



版本说明:

Elasticsearch 5.0

Logstash 5.0(暂时未用)

Filebeat 5.0

Kibana 5.0


ELK是一套采集日志并进行清洗分析的系统,由于目前的分析的需求较弱,所以仅仅采用filebeat做日志采集,没有使用logstash


一、环境准备&&软件安装:

  1、首先,需要安装Java环境

    下载安装包:jre-8u111-linux-x64.rpm

    安装:yum install jre-8u111-linux-x64.rpm

 

  2、 新建一个用户,elsearch,用来启动elasticsearch,因为该软件必须用普通用户启动。

    useradd elsearch


  3、修改变量参数:否则启动elasticsearch会报bootstrap错误。


     1、ulimit -u 10240  #


   2、vim /etc/sysctl.conf


     vm.max_map_count = 655360

     sysctl -p


   3、vim /etc/security/limits.conf


    *        soft    noproc 65536

    *        hard    noproc 65536

    *        soft    nofile 65536

    *        hard    nofile 65536


  4、软件安装

   安装包下载地址:/downloads

   使用的是绿色安装包,解压即用。

   1、filebeat安装


     tar -xvf filebeat-5.0.0-linux-x86_64.tar.gz

     cp filebeat-5.0.0-linux-x86_64 /usr/local/filebeat -r 



     ./filebeat -configtest 测试配置是否正确


   2、kibana安装


     tar -xvf kibana-5.0.0-linux-x86_64.tar.gz

     cp kibana-5.0.0-linux-x86_64 /usr/local/kibana -r


   3、logstash安装(暂时未用)


     tar -xvf logstash-5.0.0.tar.gz

     cp logstash-5.0.0 /usr/local/logstash -r


   4、elasticsearch安装


     unzip elasticsearch-5.0.0.zip

     cp elasticsearch-5.0.0 /usr/local/elasticsearch -r


二、配置&&启动

  1、启动elasticsearch


   cd /usr/local/

   chown -R elsearch:elsearch elasticsearch 将权限给elsearch用户

   su elsearch

   cd /usr/local/elasticsearch


   修改配置文件如下:


   cat config/elasticsearch.yml |grep -v "#"


     path.data: /usr/local/elasticsearch/data

     path.logs: /usr/local/elasticsearch/logs

     network.host: 192.168.221.30

     http.port: 9200


#vim conf/elasticsearch.yml
cluster.name: serverlog      #集群名称,可以自定义
node.name: node-1         #节点名称,也可以自定义
path.data: /home/elasticsearch/elasticsearch-2.3.4/data        #data存储路径
path.logs: /home/elasticsearch/elasticsearch-2.3.4/logs        #log存储路径
network.host: 10.0.18.148             #节点ip
http.port: 9200             #节点端口
discovery.zen.ping.unicast.hosts: ["10.0.18.149","10.0.18.150"]  #集群ip列表
discovery.zen.minimum_master_nodes: 3                            #集群几点数

   启动:


   cd /usr/local/elasticsearch/bin


   ./elasticsearch   #使用-d参数,放到后台执行



我配置的elasticsearch.yml如下


cluster.name: es-5.0-ztgame

node.name: node-18

network.host: 0.0.0.0

http.port: 19200

http.cors.enabled: true

http.cors.allow-origin: "*"


我配置的kibana.yml如下

server.port: 15601

server.host: "0.0.0.0"       #修改监听地址,不然只能本机访问

elasticsearch.url: ""



   查看启动情况:


   [root@localhost elasticsearch]# lsof -i:9200


   COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

   java    29987 elsearch  237u  IPv6 470519   0t0  TCP 192.168.221.30:wap-wsp

   

   在浏览器中查看:

   输入:192.168.221.30:9200

   能看到类似信息则启动成功:


{

  "name" : "FrmZoqD",

  "cluster_name" : "elasticsearch",

  "cluster_uuid" : "IcATEXFBQkGsZdh4P_TiTw",

  "version" : {

    "number" : "5.0.0",

    "build_hash" : "253032b",

    "build_date" : "2016-10-26T04:37:51.531Z",

    "build_snapshot" : false,

    "lucene_version" : "6.2.0"

  },

  "tagline" : "You Know, for Search"

}

  注意本机防火墙要关掉。


  2、配置&&启动filebeat 



#!/bin/bash

PATH=/usr/bin:/sbin:/bin:/usr/sbin

export PATH

agent="/usr/local/filebeat/filebeat"

args="-c /usr/local/filebeat/filebeat.yml -path.home /usr/local/filebeat -path.config /usr/local/filebeat -path.data /usr/local/filebeat/data -path.logs /var/log/filebeat"

test_args="-e -configtest"

test() {

$agent $args $test_args

}

start() {

    pid=`ps -ef |grep /usr/local/filebeat/data |grep -v grep |awk '{print $2}'`

    if [ ! "$pid" ];then

        echo "Starting filebeat: "

        test

        if [ $? -ne 0 ]; then

            echo

            exit 1

        fi

        $agent $args &

        if [ $? == '0' ];then

            echo "start filebeat ok"

        else

            echo "start filebeat failed"

        fi

    else

        echo "filebeat is still running!"

        exit

    fi

}

stop() {

    echo -n $"Stopping filebeat: "

    pid=`ps -ef |grep /usr/local/filebeat/data |grep -v grep |awk '{print $2}'`

    if [ ! "$pid" ];then

echo "filebeat is not running"

    else

        kill $pid

echo "stop filebeat ok"

    fi

}

restart() {

    stop

    start

}

status(){

    pid=`ps -ef |grep /usr/local/filebeat/data |grep -v grep |awk '{print $2}'`

    if [ ! "$pid" ];then

        echo "filebeat is not running"

    else

        echo "filebeat is running"

    fi

}

case "$1" in

    start)

        start

    ;;

    stop)

        stop

    ;;

    restart)

        restart

    ;;

    status)

        status

    ;;

    *)

        echo $"Usage: $0 {start|stop|restart|status}"

        exit 1

esac





   

   修改配置文件:  


   cd /usr/local/filebeat


   cp filebeat.yml filebeat.yml.default


      vim filebeat.yml

      filebeat.prospectors:

      - input_type: log

       paths:

         - /var/log/messages

      document_type: "messages"

 

      output.elasticsearch:

        hosts: ["192.168.221.30:9200"]  #filebeat传到Elasticsearch

        index: filebeat-%{+yyyy.MM.dd}  #这里的索引index会跟kibana的索引有关系


   touch /var/log/test.log  #测试日志文件

   启动:  


   ./filebeat -e -c filebeat.yml -d "publish"

  测试

   输入一条语句进行测试  


   echo "hello,test" >test.log 





将filebeat放入后台执行:


   nohup  ./filebeat -e -c filebeat.yml >>/dev/null 2>&1 &

   


  3、配置&&启动kibana

   修改配置: 


   cd /usr/local/kibana


   vim config/kibana.yml


   server.port: 5601

   server.host: "27.131.221.30"

   elasticsearch.url: ""

  修改以上三项。

   启动动服务:


   cd /usr/local/kibana/bin/

   ./kibana


  如果都配置正确的话,会进入到kibana的页面,刚开始会让你配置一个index索引

  这条索引跟我们上面filebeat里面配置的索引有关。

  filebeat-* 

  *就是时间格式,我们是按照时间来进行索引的。

  如果是用logstash进行采集数据的话,那么索引就是logstash-*

  当然,我们也可以配置多条索引,例如我们同时用filebeat和logstash进行采集不同的业务日志。


3、安装logstash


    解压


# tar -xzf logstash-5.2.0.tar.gz -C /usr/local/

    

    编辑配置文件

    


# cat /usr/local/logstash-5.2.0/config/nginx.yml


input { 

        beats {                    #监听在5043端口接收来自filebeat的日志

        port => "5043"

    }

}

 

filter {

    grok {

        match => { "message" => "%{COMBINEDAPACHELOG}"}    #过滤规则

    }

    geoip {

        source => "clientip"                                #过滤规则获取IP

    }

}

 

 

output {

  elasticsearch { hosts => ["localhost:9200"] }

  stdout { codec => rubydebug }

}



配置logstash的配置文件


#cd /etc/logstash/conf.d

#vim logstash.conf

input {

     file {

          path => ["/var/log/nginx/access.log"]

          type => "nginx_log"

          start_position => "beginning" 

        }

}

output {

     stdout {

     codec => rubydebug

      }

}

检测语法是否有错

#/opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --configtest

Configuration OK    #语法OK


修改logstash的配置文件,将日志数据输出到redis


#cat /etc/logstash/conf.d/logstash.conf

input {

     file {

          path => ["/var/log/nginx/access.log"]

          type => "nginx_log"

          start_position => "beginning" 

        }

}

output {

     redis {

            host => "10.0.18.146"

            key => 'logstash-redis'

            data_type => 'list'

      }

}



检查语法并启动服务

#/opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf  --configtest

Configuration OK


    启动


 nohup /usr/local/logstash-5.2.0/bin/logstash -f /usr/local/logstash-5.2.0/config/nginx.yml &





4、安装filebeat


   在客户端安装filebeat,用于推送日志


# tar -xzf filebeat-5.2.0-linux-x86_64.tar.gz -C /usr/local/


新建推送配置


vim /usr/local/filebeat-5.2.0-linux-x86_64/ipaper.yml


filebeat.prospectors:

- input_type: log

  paths:

    - /data/wwwlogs/test1.log        #指定推送日志文件

    - /data/wwwlogs/test2.log

output.logstash:

  hosts: ["192.168.0.54:5043"]        #指定接收logstash


启动filebeat 





5、安装kibana

   解压kibana


# tar -xzf kibana-5.2.0-linux-x86_64.tar.gz -C /usr/local/

     修改监听地址,不然只能本机访问


# vim /usr/local/kibana-5.2.0-linux-x86_64/config/kibana.ym


server.host: "0.0.0.0"

   

 启动


# /usr/local/kibana-5.2.0-linux-x86_64/bin/kibana &


阅读(669) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~