云网牛站
所在位置:首页 > Linux云服务器 > 在ubuntu中安装ELK Stack(Elasticsearch,Logstash和Kibana)

在ubuntu中安装ELK Stack(Elasticsearch,Logstash和Kibana)

2017-10-19 22:23:25作者:Linux编辑稿源:topspeedsnail

在本文中介绍在ubuntu中安装ELK Stack,-Elasticsearch 2.0.0, Logstash 2.0.0, and Kibana 4.2.0,并配置ELK,收集和可视化系统日志。Logstash 是收集,分析,存储日志信息的开源工具。Kibana 4 提供了查找,和显示日志的web接口。所有的这些工具都是基于Elasticsearch的。

 

目的:

设置用Logstash收集多个服务器的系统日志(syslogs),设置 Kibana 可视化收集的日志。

我们Logstash / Kibana的设置主要包含如下4个部分

1.Logstash: 处理传入的logs

2.Elasticsearch: 储存logs

3.Kibana:查找和显示logs的web接口,通过Nginx。

4.Logstash Forwarde 把服务器上的logs发送给Logstash,Logstash Forwarde利用lumberjack 网络协议和Logstash进行通信。

在ubuntu中安装ELK Stack(Elasticsearch,Logstash和Kibana)

我们先在一个服务器上安装Kibana,ElasticSearch,Logstash这三个组件,充当Logstash服务器。然后在客户端服务器安装Logstash Forwarder,Logstash Forwarder负责收集客户端服务器的logs并发送给Logstash服务器。

 

Logstash服务器端

安装 Java 8

Elasticsearch 和 Logstash 需要 Java 运行环境

增加Oracle Java PPA 到 apt:

sudo add-apt-repository -y ppa:webupd8team/java

更新apt包数据库:

sudo apt-get update

安装Java 8:

sudo apt-get -y install oracle-java8-installer

现在 Java 8 安装完成,下面安装 ElasticSearch。

 

安装 Elasticsearch

在用包管理工具增加Elastic的包列表,导入 Elasticsearch 公开 GPG 密钥

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

创建 Elasticsearch 源:

echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

更新apt包数据库:

sudo apt-get update

安装 Elasticsearch:

sudo apt-get -y install elasticsearch

安装完成之后,修改配置文件

sudo vi /etc/elasticsearch/elasticsearch.yml

你应该限制外网访问Elasticsearch服务(端口9200),这样可以禁止外部用户通过HTTP API访问数据。找到 network.host,去掉注释并改为localhost,如下:

network.host: localhost

启动Elasticsearch:

sudo service elasticsearch restart

设置开机自启:

sudo update-rc.d elasticsearch defaults 95 10

现在Elasticsearch安装并运行。

 

安装 Kibana

在安装Kibana之前,让我们设置kibana的用户和组

sudo groupadd -g 999 kibana

sudo useradd -u 999 -g 999 kibana

如果 GID 999 被占用,请改为其它可用的。

下载Kibana到home目录:

cd ~; wget https://download.elastic.co/kibana/kibana/kibana-4.2.0-linux-x64.tar.gz

解压:

tar xvf kibana-*.tar.gz

配置Kibana:

vi ~/kibana-4*/config/kibana.yml

找到server.host,替换IP地址为 “localhost”:

server.host: "localhost"

现在Kibana只允许本地用户访问,没有关系,因为我们要用Nginx方向代理来处理外部请求。

把Kibana放在适当的目录:

sudo mkdir -p /opt/kibana

sudo cp -R ~/kibana-4*/* /opt/kibana/

改变Kibana的所有权为之前创建的kibana用户:

sudo chown -R kibana: /opt/kibana

Kibana可以在/opt/kibana/bin/kibana启动,但这里我们把Kibana配置为服务:

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

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

启动:

sudo chmod +x /etc/init.d/kibana

sudo update-rc.d kibana defaults 96 9

sudo service kibana start

下面安装反向代理。

 

安装Nginx

因为我们设置了 Kibana 监听localhost,我们必须设置反向代理,允许外部用户访问它。这是安装Nginx的目的。

如果没有Nginx服务,安装:

sudo apt-get install nginx apache2-utils

用 htpasswd 创建管理员用户:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

kibanaadmin为管理员名称,修改为你想要的。

配置Nginx默认服务块:

sudo vi /etc/nginx/sites-available/default

清空文件内容,拷贝:

server {

listen 80;

server_name example.com;

auth_basic "Restricted Access";

auth_basic_user_file /etc/nginx/htpasswd.users;

location / {

proxy_pass http://localhost: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;

}

}

server_name 修改为你的。Nginx重定向HTTP到Kibana(监听localhost:5601),并用htpasswd.users文件验证用户名。

重启:

sudo service nginx restart

现在在浏览器输入http://logstash_server_public_ip/ 访问Logstash服务器,输入kibanaadmin用户名,就可以看到欢迎界面了。下面安装Logstash。

 

安装Logstash

创建Logstash源:

echo 'deb http://packages.elasticsearch.org/logstash/2.0/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

更新包仓库:

sudo apt-get update

安装Logstash:

sudo apt-get install logstash

现在Logstash安装完成,但是还没有配置。

 

生成SSL证书

由于我们要用Logstash Forwarder传送服务器上的logs到Logstash服务器。我们需要SSL证书的密钥对,Logstash Forwarder用这个证书确认Logstash服务的身份。创建目录存储证书的私钥:

sudo mkdir -p /etc/pki/tls/certs

sudo mkdir /etc/pki/tls/private

现在有两个选项生成SSL证书。如果你有一个DNS设置可以为客户服务器解析Logstash服务器的IP,用选项二。否则用选项一,允许你使用IP地址。

 

选项一:IP地址

vi /etc/ssl/openssl.cnf

找到[v3_ca]段:

subjectAltName = IP: logstash_server_private_ip

生成key:

cd /etc/pki/tls

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

把 logstash-forwarder.crt 文件发送给所有需要log的客户端服务器。如果你选择选项一,现在可以跳过选项二了。

 

选项二:FQDN(DNS)

如果在你的私有网络上有DNS设置,你应该创建一个A记录包含Logstash Server的私有ip地址,域名将会被下面命令使用,产生SSL证书。

cd /etc/pki/tls; sudo openssl req -subj '/CN=logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

替换logstash_server_fqdn。

把 logstash-forwarder.crt 文件发送给所有需要log的客户端服务器。

 

配置Logstash

Logstash的配置文件格式是JSON格式,在 /etc/logstash/conf.d 目录下。配置文件包含三段:inputs, filters, 和 outputs。

让我们创建一个配置文件 01-lumberjack-input.conf,并设置lumberjack的input:

sudo 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"

}

}

指定lumberjack将会监听tcp 5043端口,比使用上面创建的SSL key。

让我们创建一个配置文件 10-syslog.conf,并设置filter:

sudo vi /etc/logstash/conf.d/10-syslog.conf

filter {

if [type] == "syslog" {

grok {

match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }

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

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

}

syslog_pri { }

date {

match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]

}

}

}

filter查找syslog类型的日志(来自Logstash Forwarder),并尝试使用grok解析log。

最后我们创建30-lumberjack-output.conf:

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

output {

elasticsearch { hosts => ["localhost:9200"] }

stdout { codec => rubydebug }

}

配置Logstash把log存储到Elasticsearch。

重启:

sudo service logstash restart

sudo update-rc.d logstash defaults 96 9

设置 Logstash Forwarder (设置客户端服务器)

拷贝SSL证书到客户端服务器

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

在客户端服务器安装  Logstash Forwarder:

echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

安装:

sudo apt-get update

sudo apt-get install logstash-forwarder

注意:如果你用的是32位的ubuntu系统,会得到”Unable to locate package logstash-forwarder”错误,你需要手动安装了。

拷贝SSL证书:

sudo mkdir -p /etc/pki/tls/certs

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

 

配置Logstash Forwarder

vi /etc/logstash-forwarder.conf

在[network]段,增加下面几行:

"servers": [ "logstash_server_private_address:5043" ],

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

"timeout": 15

注意替换 logstash_server_private_address

在[files]段:

{

"paths": [

"/var/log/syslog",

"/var/log/auth.log"

],

"fields": { "type": "syslog" }

}

重启:

sudo service logstash-forwarder restart

现在Logstash Forwarder 可以发送 syslog 和 auth.log 到你的Logstash服务器。

现在你可以浏览器访问你的Logstash服务器了。

精选文章
热门文章