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
centos7搭建ELK开源实时日志分析系统的更多相关文章
- ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
前记: 去年测试了ELK,今年测试了Storm,最终因为Storm需要过多开发介入而放弃,选择了ELK.感谢互联网上各路大神,目前总算是正常运行了. logstash+elasticsearch+ki ...
- 开源实时日志分析ELK
开源实时日志分析ELK 2018-01-04 转自:开源实时日志分析ELK平台部署 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错 ...
- 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...
- ELK(+Redis)-开源实时日志分析平台
################################################################################################### ...
- 使用GoAccess构建简单实时日志分析系统
很早就知道Nginx日志分析工具GoAccess,但之前由于只能静态分析,感觉不太强大.最近发现它能够实时显示报表而且报表也比之前强大很多能做趋势分析.因此果断下载安装.以下是基于CentOS的安装配 ...
- ELK大流量日志分析系统搭建
1.首先说下EKL到底是什么吧? ELK是Elasticsearch(相当于仓库).Logstash(相当于旷工,挖矿即采集数据).Kibana(将采集的数据展示出来)的简称,这三者是核心套件,但并非 ...
- 开源实时日志分析ELK平台部署
参考帖子: (1)自动化测试Web服务器性能autobench+httperf
- 项目实战14—ELK 企业内部日志分析系统
一.els.elk 的介绍 1.els,elk els:ElasticSearch,Logstash,Kibana,Beats elk:ElasticSearch,Logstash,Kibana ① ...
- 项目实战14.1—ELK 企业内部日志分析系统
本文收录在Linux运维企业架构实战系列 一.els.elk 的介绍 1.els,elk els:ElasticSearch,Logstash,Kibana,Beats elk:ElasticSear ...
随机推荐
- Lynx
http://www.unlinux.com/doc/soft/20051105/7402.html http://www.today-wx.com/linux/274.html 把 HTML 转成文 ...
- 性能监控-TP理解
首先给出Google到的答案: The tp90 is a minimum time under which 90% of requests have been served. tp90 = top ...
- Global.asax的Application_BeginRequest实现url重写无后缀的代码
本文为大家详细介绍下利用Global.asax的Application_BeginRequest 实现url重写其无后缀,具体核心代码如下,有需求的朋友可以参考下,希望对大家有所帮助 利用Global ...
- 在Unity3d中调用外部程序及批处理文件
如果调用外部普通应用程序, 比如notepad.exe 这样调用 static public bool ExecuteProgram(string exeFilename, string workDi ...
- Lua之转义字符
print("\a"); --bell 硬件滴一声 print("a"); print("\b"); --back space ...
- MVC多语言设置 实战简洁版
此方式可以通过更改进行更改进程语言设定,支持从系统获取默认的区域设定,支持自定义,自定义的方式可以为cookie,可为资料库获取,session等方式. 具体怎么设定就看个人需要了. 第一步: 添加资 ...
- webGL 光照
1.着色(shading) 在三维图形学术语“着色”的真正含义就是,根据光照条件重建“物体各表面明暗不一的效果”的过程.明白着色过程,需要考虑两件事: 1.发出光线的光源类型. 2.物体表 ...
- 【QT学习】信号和槽机制
QT中发射信号使用 emit 来完成. 类要使用信号和槽机制,必须从QObject或者QObject子类继承.必须在类的定义中加上 Q_OBJECT 宏. 信号和槽连接时,参数类型必须相同. 关键字大 ...
- spring核心之AOP学习总结二
一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 ...
- LED驱动程序分析
混杂设备 LED驱动程序分析 /******************************* * *杂项设备驱动:miscdevice *majior=10; * * *************** ...