简谈ELK日志系统附搭建过程

生产上,无论运维还是开发都离不开日志,日志是我们遇到问题首先考虑查看的必要因素之。由于存在权限管理原因,大部分开发是无法直接接触服务器。只有运维人员才能管控操作服务器。这样一来,要是运维人员有事请假或者生产坏境是服务器众多时候,查看日志也是一件麻烦的事情。当然,开源社区为此产生了许多优秀应用,以下我们谈一谈elk日志系统。

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。官网地址为:https://www.elastic.co
• Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
• Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
• Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

简单来说需要收集日志的服务器上安装Logstash客户端,通过条件过滤等操作把日志发送到Elasticsearch服务器上,Elasticsearch服务器通过kibana图形界面进行查看、分析等一系列操作。

安装elasticsearch
1、安装JDK
Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_73.
安装JDK可以参考http://pythonyw.cn:90/article/?id=27
或者http://linuxops.xyz/2017/02/27/JENKINS%E5%AE%89%E8%A3%85/

附:在 Windows 系统上安装 JDK 和设置 JAVA_HOME 的步骤
开始之前
仅在以下情况下执行此任务:
• 您计划安装 Java CAPS 的计算机上未安装 JDK
• 或者您计划安装 Java CAPS 的计算机上未设置 JAVA_HOME

  1. 要安装 JDK,请转至 URL http://java.sun.com/javase/downloads/index.jsp。
  2. 找到相应的 JDK 并单击 “Download”。
    JDK 将安装到您的计算机上,例如 C:\Program Files\Java\jdk1.6.0_02 下。如果需要,您可以将 JDK 移动到其他位置。一旦安装了 JDK,您即可设置 JAVA_HOME。
  3. 要设置 JDK,请右键单击“我的电脑”,然后选择“属性”。
  4. 在“高级”选项卡上,选择“环境变量”,然后编辑 JAVA_HOME 以指向 JDK 所在的位置(例如:C:\Program Files\Java\jdk1.6.0_02\bin)。

2、安装elasticsearch
由于安装时候选取了elasticsearch-5.0.1.tar.gz,现在最新版本是5.2.1,也可以安装最新版本的elasticsearch

1
2
3
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.1.tar.gz
tar -xzf elasticsearch-5.0.1.tar.gz
mv elasticsearch-5.0.1 /usr/local/elasticsearch

3、编辑elasticsearch.yml

1
2
3
4
5
6
 [root@localhost elasticsearch]# grep -v '^#' config/elasticsearch.yml 
cluster.name: nmtx-cluster
node.name: node-1
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
network.host: 0.0.0.0

4、启动elasticsearch
/usr/local/elasticsearch/bin/elasticsearch -d

出现以上这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑, 建议创建一个单独的用户用来运行ElasticSearch

1
2
[root@localhost elasticsearch-5.0.0]# groupadd elk
[root@localhost elasticsearch-5.0.0]# useradd elk -g elk

更改elasticsearch文件夹及内部文件的所属用户及组为elk: elk
[root@localhost tools]# chown -R elk:elk elasticsearch-5.0.0
切换到elk用户再启动

1
2
3
4
5
6
[root@localhost local]# su elk
[elsearch@localhost local]$ ./elasticsearch-5.0.0/bin/elasticsearch –d
[root@localhost salt]# lsof -i:9200
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 24491 elsearch 112u IPv6 354543 0t0 TCP localhost:wap-wsp (LISTEN)
java 24491 elsearch 113u IPv6 354544 0t0 TCP localhost:wap-wsp (LISTEN)

当访问ip:9200无法打开时候:
修改配置文件 config/elasticsearch.yml
network.host: 0.0.0.0

问题描述:
最新版本5.0release了,想着装上试试,结果一上来就报了两个错,然后就退出了,如下:
$ ./elasticsearch

ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
[2016-11-8T04:55:45,240][INFO ][o.e.n.Node] [vJDcSkt] stopping …
[2016-11-8T04:55:45,249][INFO ][o.e.n.Node] [vJDcSkt] stopped
[2016-11-8T04:55:45,249][INFO ][o.e.n.Node] [vJDcSkt] closing …
[2016-11-8T04:55:45,257][INFO ][o.e.n.Node] [vJDcSkt] closed

遇到问题归总
问题1:
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决方案:
修改/etc/security/limits.conf文件,添加或修改如下行:

1
2
*        hard    nofile           65536
* soft nofile 65536

问题2:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决方案:
使用下面的方法临时使其生效

1
2
3
4
$ sudo sysctl -w vm.max_map_count=262144
或者修改 /etc/sysctl.conf 文件,添加 “vm.max_map_count”设置
设置后,可以使用
$ sysctl -p

问题3:
要是启动时候出现killed,可能是由于内存不足,可以启动时候设置jvm内存容量(默认配置为2G)
解决方案:
vim config/jvm.options
-Xms512m
-Xmx512m

Logstash安装
1、安装JDK
Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_73.
安装JDK可以参考http://pythonyw.cn:90/article/?id=27
或者http://linuxops.xyz/2017/02/27/JENKINS%E5%AE%89%E8%A3%85/

2、Logstash安装

Debian 平台

1
2
3
4
5
6
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -
cat >> /etc/apt/sources.list <<EOF
deb http://packages.elasticsearch.org/logstash/5.0/debian stable main
EOF
apt-get update
apt-get install logstash

Redhat 平台

1
2
3
4
5
6
7
8
9
10
11
rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
cat > /etc/yum.repos.d/logstash.repo <<EOF
[logstash-5.0]
name=logstash repository for 5.0.x packages
baseurl=http://packages.elasticsearch.org/logstash/5.0/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
EOF
yum clean all
yum install logstash

当然可以直接下载源码包:下载地址https://www.elastic.co/downloads/logstash
logstach:[root@localhost elasticsearch]# whereis logstash
logstash: /etc/logstash /usr/share/logstash
以下拿nginx访问日志演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# cat /etc/logstash/conf.d/nginx2.conf 
input {
file {
path => ["/usr/local/nginx/logs/access.log"]
}
}
filter {
grok {
match => {
"message" => "%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:http_status_code} %{NUMBER:bytes} \"(?<http_referer>\S+)\" \"(?<http_user_agent>\S+)\" \"(?<http_x_forwarded_for>\S+)\""
}
}
}
output {
elasticsearch {
hosts => ["192.168.1.234:9200"]
index => "logstash-nginx-test-%{+YYYY.MM.dd}"
workers => 1
flush_size => 1
idle_flush_time => 1
template_overwrite => true
}
stdout{codec => rubydebug}
}

启动/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx.conf &
如果出现以下报错:

则运行
/usr/share/logstash/bin/logstash –path.settings /etc/logstash -f /etc/logstash/conf.d/nginx.conf &

启动后打开:
http://192.168.1.234:9200/_cat/indices
看到yellow open logstash-nginx-test-2016.11.18 dKZ-nJkjRv66_1PSHJW8zQ 5 1 95 0 82.2kb 82.2kb这个后面配置kibana需要用到

安装kibana
1、下载安装kibana

1
2
3
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.0.1-linux-x86_64.tar.gz
tar -xzf kibana-5.0.1-linux-x86_64.tar.gz
mv kibana-5.0.0-linux-x86_64 /usr/local/kibana

2配置kibana.yml

1
2
3
4
[root@localhost kibana-5.0.0-linux-x86_64]# grep -v '^#' config/kibana.yml 
server.port: 8888
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"

3、启动kibana:
/usr/local/kibana/bin/kibana
默认启动后外网无法访问

4、配置nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name localhost;
auth_basic "Restricted Access";
auth_basic_user_file passwords;
location / {
proxy_pass http://localhost:8888;
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;
}
}

打开IP网址后新增Index Patterns 和visualize后效果(还可以新增图标等系列操作)

附几个不错的参考网站:
https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
https://es.xiaoleilu.com/010_Intro/05_What_is_it.html
https://www.elastic.co

Comments

2017-02-28