centos7搭建ELK开源实时日志分析系统

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

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

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

日志从客户端到服务端处理后在传递给客户的数据流流向如下

Logstash-forwarder--->Logstash--->Elasticsearch--->kibana--->nginx--->客户浏览器

其中Logstash-forwarder是客户端的日志收集工具将日志发送给服务端Logstash后Logstash通过使用grok匹配规则对日志进行匹配切割然后保存在Elasticsearch中通过kibana从Elasticsearch中读取数据并转交给nginx来处理后返回给客户。

好了下面就是ELK系统的安装过程了。

下面是elasticsearch/logstash 所需JVM版本

首先安装JAVA环境


1

2

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm"

rpm -Uvh jdk-8u65-linux-x64.rpm

或者直接yum安装jdk也行不过要保证安装好对应的版本。

当然也可以源码安装不过源码安装需要注意设置好环境变量


1

2

3

4

5

6

7

8

9

10

11

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.tar.gz"

tar zxvf jdk-8u65-linux-x64.tar.gz

mv jdk1.8.0_65 java

vi /etc/profile

JAVA_HOME="/usr/local/java"

PATH=$JAVA_HOME/bin:$PATH 

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

export JAVA_HOME 

export PATH 

export CLASSPATH

source /etc/profile

安装好jdk环境之后需要安装Elasticsearch


1

2

3

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

wget -c https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.noarch.rpm

rpm -ivh elasticsearch-1.7.2.noarch.rpm

修改配置文件如下


1

2

3

4

cd /usr/local/elasticsearch/

vim config/elasticsearch.yml

path.data: /data/db

network.host: 192.168.100.233

安装Elasticsearch插件如下


1

cd /usr/share/elasticsearch/ &&  ./bin/plugin -install mobz/elasticsearch-head && ./bin/plugin -install lukas-vlcek/bigdesk/2.5.0

之后启动Elasticsearch


1

systemctl start elasticsearch

然后开始安装kibana

去https://www.elastic.co/downloads/kibana 找合适的版本每个版本下面有这么一行内容一定要注意这些内容Compatible with Elasticsearch 1.4.4 - 1.7

我这里选择的是kibana-4.1.3-linux-x64.tar.gz


1

2

3

4

5

6

7

8

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

tar xf kibana-4.1.3-linux-x64.tar.gz

mv kibana-4.1.3-linux-x64 /usr/local/kibana

cd !$

vim config/kibana.yml 

port: 5601

host: "192.168.100.233"

elasticsearch_url: "http://192.168.100.233:9200"

配置文件中指明kibana侦听5601端口并且通过9200端口从elasticsearch里面获取数据。

再安装nginx可以选择源码安装这里为了图方便就使用yum安装了。

yum -y install nginx

vim /etc/nginx/nginx.conf

将server改成如下


1

2

3

4

5

6

7

8

9

10

11

12

13

server {

        listen       80 default_server;

        listen       [::]:80 default_server;

        server_name _;

         location / {

         proxy_pass http://192.168.100.233:5601;

         proxy_http_version 1.1;

         proxy_set_header Upgrade $http_upgrade;

         proxy_set_header Connection ‘upgrade‘;

         proxy_set_header Host $host;

         proxy_cache_bypass $http_upgrade;

            }

}

将日志保存格式修改为如下


1

2

3

4

log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘

             ‘$status $upstream_response_time $request_time $body_bytes_sent ‘

             ‘"$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$request_body" ‘

             ‘$scheme $upstream_addr‘;

修改日志格式是为了匹配后面的Logstash的grok匹配规则

启动nginx和kibana


1

2

systemctl start nginx

nohup /usr/local/kibana/bin/kibana -l /var/log/kibana.log &

或者也可以看看下面两个脚本


1

2

cd /etc/init.d &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-init

cd /etc/default &&  curl -o kibana https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/fc5025c3fc499ad8262aff34ba7fde8c87ead7c0/kibana-4.x-default

关于开机启动Kibana的。

之后就需要安装Logstash了


1

2

3

4

5

6

7

8

9

rpm --import https://packages.elasticsearch.org/GPG-KEY-elasticsearch

vi /etc/yum.repos.d/logstash.repo

[logstash-1.5]

name=Logstash repository for 1.5.x packages

baseurl=http://packages.elasticsearch.org/logstash/1.5/centos

gpgcheck=1

gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch

enabled=1

yum -y install logstash

这个包比较大可能国内下载起来比较慢可以去官网使用迅雷下载比较快一点。

创建TLS证书

logstash和logstash-forwarder通信需要使用tls证书认证。Logstash Forwarder上面只需公钥logstash需要配置公钥、私钥。在logstash服务器上生成ssl证书。

创建ssl证书有两种方式一种指定IP地址一种指定fqdn(dns)。

1、指定IP地址方式

vi /etc/pki/tls/openssl.cnf

在[ v3_ca ]下面配置subjectAltName = IP:192.168.100.233切记这条很重要因为还有一个地方也有subjectAltName配置错了的话就会一直无法实现认证


1

2

cd /etc/pki/tls

openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

注意将-days设置大点以免证书过期。

2、使用fqdn方式

不需要修改openssl.cnf文件。


1

2

cd /etc/pki/tls

openssl req -subj ‘/CN=logstash.abcde.com/‘ -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

将logstash.abcde.com换成你自己的域名。同时到域名解析那添加logstash.abcde.com的A记录。

使用那种方式都行不过如果logstash服务端的IP地址变换了证书不可用了。

配置logstash

logstash配置文件是以json格式设置参数的配置文件位于/etc/logstash/conf.d目录下配置包括三个部分输入端过滤器和输出。

首先创建一个01-lumberjack-input.conf文件设置lumberjack输入Logstash-Forwarder使用的协议。


1

2

3

4

5

6

7

8

9

vi /etc/logstash/conf.d/01-lumberjack-input.conf

input {

  lumberjack {

    port => 5043

    type => "logs"

    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"

    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"

  }

}

再来创建一个02-nginx.conf用于过滤nginx日志


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

vi /etc/logstash/conf.d/02-nginx.conf 

filter {

  if [type] == "nginx" {

    grok {

      match => { "message" => "%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?: %{URIPROTO:proto}/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:status} (?:%{NUMBER:upstime}|-) %{NUMBER:reqtime} (?:%{NUMBER:size}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{QS:reqbody} %{WORD:scheme} (?:%{IPV4:upstream}(:%{POSINT:port})?|-)" }

      add_field => [ "received_at""%{@timestamp}" ]

      add_field => [ "received_from""%{host}" ]

    }

    date {

        match => [ "timestamp" "dd/MMM/YYYY:HH:mm:ss Z" ]

    }

   geoip {

        source => "clientip"

        add_tag => [ "geoip" ]

        fields => ["country_name""country_code2","region_name""city_name""real_region_name""latitude""longitude"]

        remove_field => [ "[geoip][longitude]""[geoip][latitude]" ]

    }

  }

}

这个过滤器会寻找被标记为“nginx”类型Logstash-forwarder定义的的日志尝试使用“grok”来分析传入的nginx日志使之结构化和可查询。

type要与logstash-forwarder相匹配。

同时注意将nginx日志格式设置成上面的。

日志格式不对grok匹配规则要重写。

可以通过http://grokdebug.herokuapp.com/ 在线工具进行调试。多半ELK没数据错误在此处。

grok 匹配日志不成功不要往下看了。搞对为止先。

同时多看看http://grokdebug.herokuapp.com/patterns#   grok匹配模式对后面写规则匹配很受益的。

最后创建一文件来定义输出。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

vi /etc/logstash/conf.d/03-lumberjack-output.conf 

output {

    if "_grokparsefailure" in [tags] {

      file { path => "/var/log/logstash/grokparsefailure-%{type}-%{+YYYY.MM.dd}.log" }

    }

    elasticsearch {

        host => "10.1.19.18"

        protocol => "http"

        index => "logstash-%{type}-%{+YYYY.MM.dd}"

        document_type => "%{type}"

        workers => 5

        template_overwrite => true

    }

    #stdout { codec =>rubydebug }

}

定义结构化的日志存储到elasticsearch对于不匹配grok的日志写入到文件。

注意后面添加的过滤器文件名要位于01-99之间。因为logstash配置文件有顺序的。

在调试时候先不将日志存入到elasticsearch而是标准输出以便排错。

同时多看看日志很多错误在日志里有体现也容易定位错误在哪。

在启动logstash服务之前最好先进行配置文件检测如下


1

2

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

Configuration OK

也可指定文件名检测直到OK才行。不然logstash服务器起不起来。

最后就是启动logstash服务了。


1

systemctl start logstash

然后就是配置Logstash-forwarder客户端了。

安装logstash-forwarder


1

2

wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm

rpm -ivh logstash-forwarder-0.4.0-1.x86_64.rpm

需要将在安装logstash时候创建的ssl证书的公钥拷贝到每台logstash-forwarder服务器上。


1

scp 192.168.100.233:/etc/pki/tls/certs/logstash-forwarder.crt /etc/pki/tls/certs/

配置logstash-forwarder


1

2

3

4

5

6

7

8

9

10

11

12

13

14

vi /etc/logstash-forwarder.conf

{

  "network": {

    "servers": [ "10.1.19.18:5043" ],

    "ssl ca""/etc/pki/tls/certs/logstash-forwarder.crt",

    "timeout": 30

  },

  "files": [

    {

        "paths": [ "/alidata/logs/nginx/*-access.log" ],

        "fields": { "type""nginx" }

    

  ]

}

这也是个json个是的配置文件。json格式不对logstash-forwarder服务是启动不起来的。

后面就是启动logstash-forwarder服务了。

当上面的所有都配置正确的话就可以访问kibana来查看数据了。

访问效果如下所示

本文出自 “柠檬” 博客,请务必保留此出处http://xianglinhu.blog.51cto.com/5787032/1716274

时间: 2024-10-24 01:50:37

centos7搭建ELK开源实时日志分析系统的相关文章

ELK服务搭建(开源实时日志分析ELK平台部署)(低版本—简单部署)

开源实时日志分析ELK平台部署 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总. 集中化管理日志后,日志的

开源实时日志分析ELK

开源实时日志分析ELK 2018-01-04 转自:开源实时日志分析ELK平台部署 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如:开源的syslog,将所

elk开源分布式日志分析平台

elk 开源分布式日志分析平台 一.简介1.核心组成2.三大组件3.elk 的工作流程4.elk 的帮助手册二.Logstash 和 elasticsearch(elasticsearch 和 logstash 依赖 java环境)1.java2.nginx 的安装3.redis 的安装4.安装 elasticsearch5.安装 logstash6.安装 kibana三.检验 elk 的日志结果 一.简介1.核心组成>.elk 由 Elasticsearch,Logstash 和 Kibana

搭建办公环境ElasticSearch 日志分析系统

搭建办公环境ElasticSearch 日志分析系统 ? 计划将公司的防火墙+交换机+服务器(centos7)+ Vmware+Windows server纳入到监控范围,所以开启了ELK监控之旅. ? 本文采用ELK架构栈进行组建,万丈高楼平地起,虽然开始比较简陋,后期会不断完善这个日志分析系统. ? 全文框架如下: ? Hillstone: syslog→logstash→elasticsearch→kibana ? H3C: syslog→logstash→elasticsearch→ki

专栏文章推荐:轻松玩转ELK海量可视化日志分析系统

最近一直在更新ELK系列的专栏,此专栏主要是针对ELK从入门到实战应用的介绍,内容非常实用,通过多年对ELK的使用经验,此文浓缩了ELK的各种应用技能和总结,强烈推荐给大家阅读. 在学习过程中,如果遇到任何问题可在本文后面留言,或者在专栏里面留言. 下面是专栏的介绍. 专栏介绍 ELK是目前行业中非常热门的一个技术,它可以用于电商网站.门户网站.企业IT系统等各种场景下,也可以用于对海量的数据进行近实时的数据分析. 专栏深入浅出剖析ELK在企业常见应用框架以及ZooKeeper.Kafka与EL

开源实时日志分析ELK平台部署

最近简单了解了关于ELK的知识: ELK 由ElasticSearch . Logstash 和 Kiabana 三个开源工具组成 官方网站:https://www.elastic.co/products |   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等. l   Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索)

使用GoAccess构建简单实时日志分析系统

很早就知道Nginx日志分析工具GoAccess,但之前由于只能静态分析,感觉不太强大.最近发现它能够实时显示报表而且报表也比之前强大很多能做趋势分析.因此果断下载安装.以下是基于CentOS的安装配置步骤. 1.安装 GeoIPsudo yum install geoip geoip-devel 2.安装centos: yum install go access或源码安装$ wget http://tar.goaccess.io/goaccess-1.1.1.tar.gz $ tar -xzv

实时日志分析系统ELK 部署与运行中的问题汇总

前记: 去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK.感谢互联网上各路大神,目前总算是正常运行了. logstash+elasticsearch+kibana的搭建参考:http://wsgzao.github.io/post/elk/.由于搭建过程比较简单就不赘述,主要分享几个坑. 正文: 1.日志如何获取 无论是storm方案还是elk,都涉及这个关键问题.为减少和运维.开发的交叉,尽可能独立.快速,加之当时发现了justniffer这个“神

Linux下开源实时日志分析elk部署详解

前言: Elk主要就是3个软件的组合,主要是elasticsearch搜索引擎,Logstash是一个日志收集日志,kibana实时分析进行展示. [关于日志搜集的软件,如:scribe,flume,heka,logstash,chukwa,fluentd,当然rsyslog rsyslog-ng都可以搜集. 关于日志手机后存储软件,如:HDFS,Cassandra mongodb, redis,elasticsearch. 关于日志分析软件比如要用HDFS就可以写mapreduce分析,如果需