zoukankan      html  css  js  c++  java
  • ELK日志系统

    ELK stack是又Elasticsearch,lostash,kibana 三个开源软件的组合而成,形成一款强大的实时日志收集分析展示系统。

    Logstash:日志收集工具,可以从本地磁盘,网络服务(自己监听端口,接受用户日志),消息队列中收集各种各样的日志,然后进行过滤分析,并将日志输入到Elasticsearch中。

    Elasticsearch:日志分布式存储/搜索工具,原生支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。

    Kibana:可视化日志web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。

    ELK工作原理:

                           

    (左边是三台web,每一台都会部署一台logstash,主要是把新添加的日志发送到redis队列里面,redis主要作用是存储多台web日志,如果是直接从代码里面写入数据,redis也可以防止数据丢失,logstash-index负责从redis相应的队列中里面取出日志,对日志进行加工后输出到elasticsearch,这边用了2台logstash-index,做了负载均衡以及高可用,elasticsearch主要做集群,前面三台互为主从,第四台不为主,不存储数据,主要是用来连接kibana,来实现日志界面化。)

    版本:

    elasticsearch-5.6.0、logstash-5.6.0、kibana-5.6.0

    软件下载:

    elasticsearch:
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.0.tar.gz
    
    logstash: https://artifacts.elastic.co/downloads/logstash/logstash-5.6.0.tar.gz kibana: https://artifacts.elastic.co/downloads/kibana/kibana-5.6.0-linux-x86_64.tar.gz

      

    环境搭建:

    ELK依赖于JDK,下载最新版本就可以的(自行操作)

    安装elasticsearch

    tar -zxvf elasticsearch-5.6.0.tar.gz -C /usr/local
    mv /usr/local/elasticsearch-5.6.0 /usr/local/elasticsearch  

    修改elasticsearch配置文件(另外几台一样,只需修改node.name和network.host,最后一台node.master为false,node.data为false)

    cluster.name: uooc-application ##集群名称
    node.name: node-210 ##节点名称
    node.master: true ##是否为主
    node.data: true ##是否存储
    path.conf: /usr/local/elasticsearch/config/ ##配置文件路径
    path.data: /data/elasticsearch/data ##数据路径
    path.logs: /data/elasticsearch/logs/ ##日志路径
    discovery.zen.ping.unicast.hosts: ["192.168.1.99","192.168.1.100","192.168.1.210"]
    bootstrap.memory_lock: true ##不写入内存
    network.host: 192.168.1.211
    http.port: 9200
    
    # 增加参数,使head插件可以访问es 
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

      

    安装插件head:

    1.下载head插件

    wget https://github.com/mobz/elasticsearch-head/archive/master.zip
    

    2.安装node

    wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
    tar -zxvf node-v4.4.7-linux-x64.tar.gz
    ln -s /usr/local/src/node-v4.4.7-linux-x64/bin/* /usr/bin/

    3.安装grunt

    grunt是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动

    cd /usr/local/elasticsearch/elasticsearch-head-master
    npm install -g grunt-cli  #执行后会生成node_modules文件夹
    grunt -version #检测是否安装成功
    

    4.修改head插件源码

    如果你es不是默认监听本地,不是默认端口,就需要修改_site/app.js这个文件

    5.运行head

    在elasticsearch-head-master目录下,npm install(安装下载的包)

    启动:grunt server 或者npm run start

    6.访问192.168.1.211:9100

    增加用户es以及修改目录权限:

    useradd es
    chown -R es:es /data/elasticsearch
    chown -R es:es /usr/local/elasticsearch
    

    修改linux配置:

    启动elasticsearch的时候,会有一些报错,需修改:

    编辑/etc/sysctl.conf,添加vm.max_map_count=262144,立即生效(sysctl -w vm.max_map_count=262144)

    编辑/etc/security/limits.conf,添加如下代码:

    * soft memlock unlimited
    * hard memlock unlimited
    
    * hard nofile 65536
    * soft nofile 65536
    

    启动elasticsearch(需用es用户启动):

    /usr/local/elasticsearch/bin/elasticsearch > /data/elasticsearch/logs/run.log  2>&1 & (我一般丢在后台运行)
    

      

    安装logstash:

    tar -zxvf logstash-5.6.0.tar.gz -C /usr/local
    mv /usr/local/logstash-5.6.0 /usr/local/logstash
    

    创建logstash配置文件

    1.设置用户权限

    chown -R es:es /usr/local/logstash
    su es
    

    2.创建存放配置文件目录

    mkdir /usr/local/logstash/conf.d
    cd /usr/local/logstash/conf.d
    

    3. 在conf.d目录下,编辑配置文件error.conf

    vim error.conf
    input {
            file {
                    type => "php_error"
                    path => ["/dirpath/errors.log"]
            }
            file {
                    type => "nginx_error"
                    path => ["/dirpath/errors.log"]
            }
    }
    
    filter {
        if [type] == "php_error" {
            grok {
               patterns_dir => "/usr/local/logstash/conf.d/define"
               match => ["message", "%{PHP_LOG}"]
               overwrite => ["message"]
            }
            date {
                match => ["timestamp", "dd-MMM-yyyy HH:mm:ss"]
            }
        }
    }
    
    output {
            if [type] == "php_error" {
                redis {
                    host => ["localhost"]
                    data_type => "list"
                    key => "LOGSTASH:PHP"
                }
            }
            else if [type] == "nginx_error" {
                redis {
                    host => ["localhost"]
                    data_type => "list"
                    key => "LOGSTASH:NGINX"
                }
    
            }
    }
    

     这边主要是把web服务器上面的nginx、php错误日志,以一定的格式存储到redis对应的key中,filter用来对数据进行处理,gork进行正则匹配,因为默认的patterns没有我符合要求的,通过patterns_dir来添加自定义的正则,首先在conf.d目录下面创建defile目录,然后在该目录下编辑一个文件error(文件名随便创建),其中date主要的作用是把日志里面的时间更新给@timstamp,防止数据阻塞,时间有偏差,导致不能及时搜索到对应时间段的数据。

    4.在当前目录下面创建defile目录

    mkdir /usr/local/logstash/conf.d/defile

    5.编辑error文件

    LETTER [a-zA-Z/]+
    PHP_TS %{MONTHDAY}[/-]%{MONTH}[/-]%{YEAR} %{TIME}
    PHP_LOG [%{PHP_TS:timestamp} %{LETTER:timezone}] PHP %{LOGLEVEL:loglevel}: %{GREEDYDATA:message}  

    6. 日志内容格式如下:

    [30-Nov-2017 14:44:44 Asia/Shanghai] PHP Warning:  mkdir(): Permission denied in /data/xxx/hello.php on line 27
    

    7.启动error.conf配置文件

    mkdir /usr/local/logstash/logs
    /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf.d/error.conf >/usr/local/logstash/logs/run.log 2>&1 &

     8.手动触发php错误日志

    cat >> /data/xxx/errors.log << EOF
    [30-Nov-2017 14:44:44 Asia/Shanghai] PHP Warning:  mkdir(): Permission denied in /data/xxx/hello.php on line 27
    EOF
    

    9.通过redis查看该key

    10.创建导入es中的配置文件php.conf

    input {
    	redis {
    		host      => "127.0.0.1"
    		port      => 6379
    		data_type => "list"
    		key       => "LOGSTASH:PHP"
    		codec     => "json"
    		threads   => 3
    		batch_count => 10
    	}
    }
    	
    output {
            stdout {
    	       codec => rubydebug
            }
    	elasticsearch {
    		hosts => ["192.168.1.211:9200"]
    		index => "php-error-%{+YYYY.MM.dd}"
        }
    }

    把对应的数据输出到终端以及elasticsearch中去。

    11.启动php.conf配置文件

    /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf.d/php.conf  --path.data /usr/local/logstash/logs/1 > /usr/local/logstash/logs/php.log 2>&1 &
    

    安装kibana

    tar -zxvf kibana-5.6.0-linux-x86_64.tar.gz -C /usr/local
    mv /usr/local/kibana-5.6.0-linux-x86_64 /usr/local/kibana
    chown -R es:es /usr/local/kibana
    

    修改配置文件:

    默认kibana.yml,是监听本地的5601端口,以及连接本地的elasticsearch。如果需要修改则:

    server.host: "192.168.1.211"
    elasticsearch.url: "http://192.168.1.211:9200"
    

    启动kibana:

    mkdir /usr/local/kibana/logs
    /usr/local/kibana/bin/kibana > /usr/local/kibana/logs/run.log 2>&1 &
    

    创建对应的索引名(可以模糊创建),访问192.168.1.211:5601

      

      

      

  • 相关阅读:
    Spring_HelloWorld
    【日记想法】2017年终总结
    【运维技术】从零开始搭建开发使用的Kafka环境
    【运维技术】windows安装apache服务器,实现域名对应端口的解析跳转
    【软件安装】Xshell + XFtp
    【运维技术】node项目使用strongloop进行部署相关教程
    【运维技术】CentOS7上从零开始安装LAMP安装织梦DedeCMS教程
    【运维技术】CentOS7上从零开始安装阿里RocketMQ版本:release-4.0.1【亲测哈哈】
    【运维技术】VM虚拟机上使用centos7安装docker启动gogs服务教程【含B站视频教程】
    【读书笔记】Junit实战
  • 原文地址:https://www.cnblogs.com/654wangzai321/p/7944221.html
Copyright © 2011-2022 走看看