共计 7475 个字符,预计需要花费 19 分钟才能阅读完成。
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 环境
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 也行不过要保证安装好对应的版本。
当然也可以源码安装不过源码安装需要注意设置好环境变量
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
修改配置文件如下
cd /usr/local/elasticsearch/
vim config/elasticsearch.yml
path.data: /data/db
network.host: 192.168.100.233
安装 Elasticsearch 插件如下
cd /usr/share/elasticsearch/ && ./bin/plugin -install mobz/elasticsearch-head && ./bin/plugin -install lukas-vlcek/bigdesk/2.5.0
之后启动 Elasticsearch
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
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 改成如下
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
关于开机启动 Kibana 的。
之后就需要安装 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 证书认证。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 配置错了的话就会一直无法实现认证
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 文件。
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 使用的协议。
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]” ]
}
}
}
这个过滤器会寻找被标记为“nginx”类型 Logstash-forwarder 定义的的日志尝试使用“grok”来分析传入的 nginx 日志使之结构化和可查询。
type 要与 logstash-forwarder 相匹配。
同时注意将 nginx 日志格式设置成上面的。
日志格式不对 grok 匹配规则要重写。
可以通过 http://grokdebug.herokuapp.com/ 在线工具进行调试。多半 ELK 没数据错误在此处。
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 配置文件有顺序的。
在调试时候先不将日志存入到 elasticsearch 而是标准输出以便排错。
同时多看看日志很多错误在日志里有体现也容��定位错误在哪。
在启动 logstash 服务之前最好先进行配置文件检测如下
/opt/logstash/bin/logstash –configtest -f /etc/logstash/conf.d/*
Configuration OK
也可指定文件名检测直到 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/
配置 logstash-forwarder
1234567891011121314 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://www.linuxidc.com/Linux/2016-09/135138.htm