部署 elk 日志系统 elasticsearch、logstash、 kibana

安装elk    
    安装Java 1.8环境
        解压源码安装包:

        tar xf jdk-8u121-linux-x64.tar.gz 
        ll
        mkdir /work/opt -p
        mv  jdk1.8.0_121  /work/opt/jdk
        ll /work/opt/jdk/
        chown -R root.root  /work/opt
         
        vim /etc/profile :    //添加
        export JAVA_HOME=/work/opt/jdk
        export JAVA_BIN=$JAVA_HOME/bin
        export JRE_HOME=${JAVA_HOME}/jre
        export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
        export PATH=$JAVA_BIN:$PATH

安装 elasticsearch-5.3.0

    tar xf elasticsearch-5.3.0.tar.gz 
    mv elasticsearch-5.3.0 /work/opt/elasticsearch
    
    
    [email protected]:/work/opt/elasticsearch/config$ egrep -v ‘#|^$‘ elasticsearch.yml
    cluster.name: lvnian-elk
    node.name: lvnian-elk-node1
    path.data: /data  #由于是普通用户启动elasticsearch,所以这个目录的属主需要改为普通用户
    path.logs: /work/opt/elasticsearch/logs     #由于是普通用户启动elasticsearch,所以这个目录的属主需要改为普通用户
    bootstrap.memory_lock: false
    network.host: 0.0.0.0
    http.port: 9200
    http.cors.enabled: true 
    http.cors.allow-origin: "*" 
    [email protected]:/work/opt/elasticsearch/config$ 
    nohup /work/opt/elasticsearch/bin/elasticsearch >> /tmp/elasticsearch.log  &

##ES 5.1.1 安装 head:
    (5.1.1版本的 elasticsearch 没有提供直接插件安装方法,但在该github上该插件作者给出了方法)

        下载二进制源码包:
        wget https://nodejs.org/dist/v4.2.2/node-v6.2.0-linux-x64.tar.gz
        解压:
        tar xf node-v6.2.0-linux-x64.tar.gz -C /work/opt/
        设置环境变量:
        vim /etc/profile: 
            export NODE_HOME=/work/opt/node/
            export PATH=$PATH:$NODE_HOME/bin
         
        [email protected]:/work/source# node --version
        v6.10.1
    
        npm config set registry https://registry.npm.taobao.org    //设置代理镜像源,加速下载
        cd /home/stt/node-v4.2.2-linux-x64/lib/node_modules
        npm install grunt    //显示的2条warn可以忽略

测试grunt是否生效:

        $ grunt -version
        grunt-cli v1.2.0
        grunt v1.0.1

安装head插件:

          下载:git clone git://github.com/mobz/elasticsearch-head.git
        cd /home/stt/elasticsearch-head
        npm install (提示:如果遇到网络的瓶颈,将预先下载的源码包放在对应的位置效果一样,目录为/tmp/phantomjs/,确定位置后可自行创建并上传包)
        修改 elasticsearch-head/ _site/app.js
        // 把localhost改为ip
        找到:
        this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
        改为:
        this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.8.116:9200";
        修改 elasticsearch-head/Gruntfile.js
        connect: {
            server: {
                options: {
                    hostname: "0.0.0.0",     //增加这个配置
                    port: 9100,
                    base: ‘.‘,
                    keepalive: true
                }
            }
        }

启动服务:(后台运行)
        grunt server &    //需要在 /home/stt/elasticsearch-head 下执行,因为我的 grunt 没有进行全局的安装

##安装Logstash(这个软件在你需要读取的日志服务上安装,用logstash读取你的日志,上传给elasticsearch的):
        也需要安装java1.8环境

        tar xf logstash-5.3.0.tar.gz 
        mkdir /work/opt
        mv logstash-5.3.0 /work/opt/
        cd /work/opt/

vim /work/opt/logstash-5.3.0/conf/central.conf    #(处理基于 FILE 方式输入的日志信息,这里是简单的举个例子,日后继续学习补充)

        input {
            file {
                path => "/tmp/*.log"
            }
        }
        output {
            elasticsearch {
                hosts => "192.168.8.116:9200"
                index => "nginx-access"
            }
            stdout {
                codec => rubydebug
            }
        }

##安装Kibana:
    解压源码包:

    tar zxf kibana-5.1.1-linux-x86_64.tar.gz -C /home/stt/server/
    vim config/kibana.yml    //修改
        server.port: 5601    //打开注释而已,不用可以去效果,请使用默认端口
        server.host: "0.0.0.0"    //打开监听地址,让别的机器也能访问这个 kibana
        elasticsearch.url: "http://127.0.0.1:9200"      //这个url要根据实质情况,添加访问 elasticsearch 的url
    启动服务: (后台运行)
    /home/stt/server/kibana-5.1.1-linux-x86_64/bin/kibana &

安装nginx 反向代理,
    apt-gei install nginx

nginx放心代理配置文件如下:

 ##文件名kibana.conf
    upstream backend {
                 server 172.31.6.155:5601;
             }
      server {
            listen       80;
            server_name  kibana.lvnian.co;
        access_log /tmp/kibana-access.log;
        error_log /tmp/kibana-error.log;
            location / {
                #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 #禁用缓存
                 proxy_buffering off;
                 #反向代理的地址
                 proxy_pass http://backend;     
            }
        }

logstash 读取nginx的访问日志以及error日志,上传到logstash的配置文件文件。

用下面命令运行即可

nohup /work/opt/logstash-5.3.0/bin/logstash -f /work/opt/logstash-5.3.0/conf/elk-nginx-log.conf &

   文件名: elk-nginx-log.conf
    input {
        file {
            path => "/data/log/nginx/*.log"
            start_position => beginning
        }
    }
    filter {
        if [path] =~ "access"  {
            mutate { replace => { type => "nginx_access" } }
            ruby {
                init => "@kname = [‘http_x_forwarded_for‘,‘time_local‘,‘request‘,‘status‘,‘body_bytes_sent‘,‘request_body‘,‘content_length‘,‘http_referer‘,‘http_user_agent‘,‘http_cookie‘,‘remote_addr‘,‘hostname‘,‘upstream_addr‘,‘upstream_response_time‘,‘request_time‘]"
                code => "
                    new_event = LogStash::Event.new(Hash[@kname.zip(event.get(‘message‘).split(‘|‘))])
                    new_event.remove(‘@timestamp‘)
                    event.append(new_event)
                "
            }
            if [request] {
                ruby {
                    init => "@kname = [‘method‘,‘uri‘,‘verb‘]"
                    code => "
                        new_event = LogStash::Event.new(Hash[@kname.zip(event.get(‘request‘).split(‘ ‘))])
                        new_event.remove(‘@timestamp‘)
                        event.append(new_event)
                    "
                }
                if [uri] {
                    ruby {
                        init => "@kname = [‘url_path‘,‘url_args‘]"
                        code => "
                            new_event = LogStash::Event.new(Hash[@kname.zip(event.get(‘uri‘).split(‘?‘))])
                            new_event.remove(‘@timestamp‘)
                            event.append(new_event)
                        "
                    }
                    kv {
                        prefix => "url_"
                        source => "url_args"
                        field_split => "& "
                        remove_field => [ "url_args","uri","request" ]
                    }
                }
            }
            mutate {
                convert => [
                    "body_bytes_sent" , "integer",
                    "content_length", "integer",
                    "upstream_response_time", "float",
                    "request_time", "float"
                ]
            }
            date {
                match => [ "time_local", "dd/MMM/yyyy:hh:mm:ss Z" ]
                locale => "en"
            }
        }
        else if [path] =~ "error" {
            mutate { replace => { type => "nginx_error" } }
            grok {
                match => { "message" => "(?<datetime>\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d) \[(?<errtype>\w+)\] \S+: \*\d+ (?<errmsg>[^,]+), (?<errinfo>.*)$" }
            }
            mutate {
                rename => [ "host", "fromhost" ]
                gsub => [ "errmsg", "too large body: \d+ bytes", "too large body" ]
            }
            if [errinfo]
            {
                ruby {
                    code => "
                        new_event = LogStash::Event.new(Hash[event.get(‘errinfo‘).split(‘, ‘).map{|l| l.split(‘: ‘)}])
                        new_event.remove(‘@timestamp‘)
                        event.append(new_event)
                    "
                }
            }
            grok {
        #       match => { "request" => ‘"%{WORD:verb} %{URIPATH:urlpath}(?:\?%{NGX_URIPARAM:urlparam})?(?: HTTP/%{NUMBER:httpversion})"‘ }
                match => { "request" => ‘"%{WORD:verb} %{URIPATH:urlpath}?(?: HTTP/%{NUMBER:httpversion})"‘ }
                patterns_dir => ["/etc/logstash/patterns"]
        #      remove_field => [ "message", "errinfo", "request" ]
            }
        }
        else {
                mutate { replace => { type => "random_logs" } }
        }
    }
    output {
        elasticsearch {
            hosts => "172.31.1.79:9200"
            #index => "logstash-nginx"
            index => "logstash-%{type}-%{+YYYY.MM.dd}"
            document_type => "%{type}"
            flush_size => 20000
            idle_flush_time => 10
            sniffing => true
            template_overwrite => true
        }
        #    stdout {
        #        codec => rubydebug
        #    }
    }
时间: 2024-11-01 22:11:36

部署 elk 日志系统 elasticsearch、logstash、 kibana的相关文章

ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开发者日后的维护.每当客户端生产一条消息并发送到消息队列后,就会插入一条对应的记录到数据库里.当这条消息被消费之后,又会更新数据库里对应的记录的几个column的值,比如status.updated_on这些常用的column. 由于客户每天生产消费的消息很多,导致数据库里的这个表里的数据很多,长年累

centos7 部署 ELK 日志系统

=============================================== 2017/12/17_第1次修改                       ccb_warlock =============================================== ELK(elasticsearch.logstash.kibana)可以作为日志收集及分析的一整套系统,通过阿里的普及也有越来越多的公司在使用,使用下来功能还可以,这里整理记录一个部署手册. 为了方便,将E

ELK日志系统:Elasticsearch+Logstash+Kibana搭建教程

ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载包:jdk-8u131-linux-x64.rpm yum localinstall jdk-8u131-linux-x64.rpm mvn 安装 cd /usr/lo

elasticsearch + logstash + kibana 搭建实时日志收集系统【原创】

实时日志统一收集的好处: 1.快速定位集群中问题机器 2.无需下载整个日志文件(往往比较大,下载耗时多) 3.可以对日志进行统计 a.发现出现次数最多的异常,进行调优处理 b.统计爬虫ip c.统计用户行为,做聚类分析等 基于上面的需求,我采用了 ELK(elasticsearch + logstash + kibana)的方案,安装方法请到他们的官网:https://www.elastic.co/ 上面查询,这里我主要讲讲我遇到的问题. ??????1.LVS 分发UDP请求不成功的问题???

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

(高版本)ELK(Elasticsearch + Logstash + Kibana)服务服务搭建

一.ELK是什么鬼? ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台. 1. ElasticSearch ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引

在CentOS7中部署ELK日志分析系统

在CentOS7中部署ELK日志分析系统 ELK原理介绍 什么是ELK ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具. Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大功能:是一套开放REST和JAVA API等

elasticsearch+logstash+kibana部署

这篇博客讲的是elasticsearch+logstash+kibana部署的方法. 内容大纲: 1.elasticsearch+logstash+kibana部署 2.收集Tomcat日志 3.收集tcp日志 一.elasticsearch+logstash+kibana部署 1.elasticsearch部署 由于条件有限,这三个组件都装在同一台机器上面. 系统版本: elasticsearch-6.7.0.logstash-6.7.0.kibana-6.7.0-linux-x86_64 [

基于Docker容器部署ELK日志分析系统

部署ELK日志分析系统,比较消耗计算机硬件,如果使用虚拟机进行测试部署,建议分配较多的硬件资源,否则,当elk容器运行后,会使其无法正常运行.我这里将分配给docker主机5G内存,四个CPU. 一.环境准备 我这里使用一台docker主机(如需要部署docker服务,可以参考博文:Docker的安装详细配置),其IP地址为192.168.20.6,在其之上运行elk容器. 二.配置docker主机运行elk容器 [[email protected] ~]# echo "vm.max_map_c