在本文中介绍在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进行通信。
我们先在一个服务器上安装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服务器了。 |