Elasticsearch是一款开源的分布式搜索引擎,具有分布式零配置、自动索引发现、自动索引分片和复制机制、restful风格界面、多数据源自动搜索加载等特点。
Logstash是一个完全开源的工具,可以收集、分析和存储你的日志,以备后用,比如搜索。
Kibana也是一个开源的免费工具。Kibana可以为Logstash和ElasticSearch提供日志分析。友好的Web界面可以帮助您总结、分析和搜索重要的数据日志。
从日志客户端到服务器的处理之后,到客户的数据流如下
logstash-forwarder->;logstash->;elasticsearch->;基巴纳->;nginx->;客户端浏览器
Logstash-forwarder是客户端的日志收集工具。日志发送到服务器Logstash后,Logstash使用grok匹配规则对日志进行匹配切割,然后保存在Elasticsearch中。kibana从Elasticsearch中读取数据并传输到nginx进行处理,然后返回给客户端。
好了,下面是ELK系统的安装流程。
以下是elasticsearch/logstash所需JVM版本。
首先安装JAVA环境
或者直接从yum安装jdk,但是要确保安装了相应的版本。
当然也可以安装源代码,但是要注意在安装源代码的时候设置环境变量。
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
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按如下方式修改配置文件
按照如下方式安装Elasticsearch插件
然后开始Elasticsearch。
systemctl start elasticsearch然后开始安装kibana
去https://www.elastic.co/downloads/kibana找正确的版本。每个版本下面都有这么一行字。一定要注意这些内容。与d性搜索1.4.4-1.7兼容
我选择了kibana-4.1.3-linux-x64.tar.gz。
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安装nginx
vim/etc/nginx/nginx.conf
将服务器更改为以下内容
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; } }按如下方式修改日志保存格式
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
systemctl start nginx nohup /usr/local/kibana/bin/kibana -l /var/log/kibana.log &或者看下面两个脚本。
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关于启动基巴纳。
之后,您需要安装Logstash
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证书身份验证。LogstashForwarder上只需要公钥。Logstash需要配置公钥和私钥。在logstash服务器上生成ssl证书。
创建ssl证书有两种方法:一种是指定IP地址,另一种是指定fqdn(dns)。
1.指定IP地址方法
vi/etc/pki/tls/openssl.cnf
在[v3_ca]下配置subjectaltname=IP:192.168.100.233。请记住这一点非常重要,因为如果subjectaltname配置不正确,还有一个地方无法对其进行认证。
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请注意,应该将-天设置得更大,以防止证书过期。
2.使用fqdn方法
不需要修改openssl.cnf文件。
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配置文件是一个以json格式设置参数的配置文件。它位于/etc/etc/logstash/conf.d目录下,配置包括三个部分:输入过滤器和输出。
首先,创建一个01-lumberjack-input.conf文件来设置lumberjack用来输入Logstash-Forwarder的协议。
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日志。
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]" ] } } }该过滤器将查找由Logstash-forwarder定义的标记为“nginx”类型的日志,并尝试使用“grok”来分析传入的nginx日志,以使它们结构化并可搜索。
与logstash-forwarder匹配的类型。
同时注意如上设置nginx日志格式。
日志格式错误。grok匹配规则需要重写。
可以通过http://grokdebug.herokuapp.com/在线工具进行调试。这里大部分麋鹿没有数据误差。
Grok匹配日志失败。不要往下看。是啊,在那之前。
同时,多读一些关于http://grokdebug.herokuapp.com/patterns#Grok匹配模式的知识,对以后写规则匹配是有好处的。
创建最后一个文件来定义输出。
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配置文件是有序的。
调试时,log不会先存储在elasticsearch中,而是标准输出进行调试。
同时,看日志。许多错误都反映在日志中,很容易找到错误。
在启动logstash服务之前,最好按如下方式检查配置文件
/opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/* Configuration OK您也可以指定文件名检测,直到确定。否则logstash服务器就起不来了。
最后,启动logstash服务。
systemctl start logstash然后是配置Logstash-forwarder客户端的时候了。
安装logstash-forwarder
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服务器。
scp 192.168.100.233:/etc/pki/tls/certs/logstash-forwarder.crt /etc/pki/tls/certs/配置日志存储-转发器
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来查看数据了。
访问效果如下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)