、 简介

1.1 介绍

  ELK是三个开源工具组成,简单解释如下:

  Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

Kibana 也是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

1.2 场景分析

  日志主要包括系统日志、应用程序日志和安全日志等等。运维人员和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

  通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

  集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

  这里采用开源实时日志分析ELK平台能够完美的解决我们上述的问题,当然也还有别的平台或者工具可以使用,这里只讨论ELK,官方网站:https://www.elastic.co

二、安装Elasticsearch

2.1 安装jdk

1
2
3
4
# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

2.2 安装Elasticsearch

1
2
3
4
5
# tar -zxvf elasticsearch-5.6.3.tar.gz
# mv elasticsearch-5.6.3 /data/elasticsearch
# cd elasticsearch/config/
# 备份配置文件
# cp elasticsearch.yml elasticsearch.yml.bak

  编辑配置文件

1
2
3
4
5
6
7
8
9
# cat elasticsearch.yml | grep -v ^#
cluster.name: elk-application
node.name: node-1
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
network.host: 172.16.220.248
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node-1"]
discovery.zen.minimum_master_nodes: 1

  添加elasticsearch用户,不能使用root启动

1
2
3
# groupadd -g 1008 elasticsearch
# useradd -g 1008 -u 1008 elasticsearch
# chown -R elasticsearch:elasticsearch /data/elasticsearch/

  修改sysctl.conf文件

1
2
3
4
# vim /etc/sysctl.conf
vm.max_map_count = 262144
 
# sysctl -p  

  修改/etc/security/limits.conf文件,修改打开文件句柄

1
2
3
4
*               soft    nofile          100000
*               hard    nofile          100000
*               soft    nproc           100000
*               hard    nproc           100000

  添加hosts文件

1
2
# vim /etc/hosts
172.16.220.248 node-1

  启动

1
2
3
# su -s elasticsearch
# cd /data/elasticsearch/bin
# ./elasticearch &

  查看是否启动

  

  简单的curl测试

1
# curl http://172.16.220.248:9200

  

三、安装Logstash和filebeat

  filebeat用于在各个服务器上获取数据,发送到logstash上,再由logstash处理数据。

3.1 安装logstash

1
2
# tar -zxvf logstash-5.6.3.tar.gz
# mv logstash-5.6.3 /data/logstash

3.2 安装filebeat

  下载filebeat并启动,通过它来监听数据源文件的新增内容经过logstash处理后上传到es里面

1
2
3
4
# tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz
# mv filebeat-5.6.3-linux-x86_64 /data/filebeat
# cd /data/filebeat
# cp filebeat.yml filebeat.yml.bak

  编辑filebeat.yml文件

1
2
3
4
5
6
filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/message-log  # 测试本机的一个log文件
output.logstash:
  hosts: ["172.16.220.248:5044"]

  启动filebeat服务

1
2
# cd /data/filebeat
# ./filebeat &

  查看启动,filebeat没有监听端口,主要看日志和进程

1
2
# tialf logs/filebeat
# ps -ef | grep filebeat

  

  filebeat监听的文件记录信息在/data/filebeat/data/registry

  新建一个本地文件message-log,可以取几条本机系统的messages文件

  

3.3 启动logstash  

  最后新建一个logstash的启动指定test.conf配置文件,内容如下:  

1
2
3
4
5
6
7
8
9
10
11
input {
    beats {
      port ="5044"
    }
}
output {
   elasticsearch {
   hosts ="172.16.220.248:9200"
  }
  stdout { codec => rubydebug }   # 这是将输出打印在屏幕上,可以注释掉
}  

  Logstash默认有input、filter、output三个区域,一般最少需要配置input和output即可!

  logstash的本身默认的logstash.yml配置文件选择不修改即可!

  简单测试一下logstash不指定配置文件启动

1
2
# cd /data/filebeat/bin
# ./logstash -e 'input { stdin {} } output {stdout {} }'

  

  我们手动输入 hello world,它也会输出 hello world

  指定配置文件启动logstash 

1
# ./logstash -f ../config/test.conf &

  查看5044端口和9600端口是否开启

  

  等待一会后应该会出现如下信息输出,这也就是test.conf里面最后一行定义输出到屏幕上

  

四、安装kibana 

1
2
3
4
# tar -zxvf kibana-5.6.3-linux-x86_64.tar.gz
# mv kibana-5.6.3-linux-x86_64 /data/kinbana
# cd /data/kinbana/config/
# cp kibana.yml kibana.yml.bak

  编辑kibana.yml配置文件

1
2
3
4
# vim kibana.yml
server.port: 5601
server.host: "172.16.220.248"
elasticsearch.url: "http://172.16.220.248:9200"

  启动kinbana

1
2
# cd /data/kibana/bin
# ./kibana &

  查看端口

  

  浏览器登入查看

  

  点击create按钮后,然后点击上面的discover按钮,注意如果没数据的话,注意看看导入的时间@timestamp和现在的时间对比一下,kibana默认只显示最近15分钟的数据,如果超出15分钟请选择适当的时间,从kibana可以看到messages-log里面的15条数据都正常导入了。这就也完成我们的实现的第一个效果。但是这仅仅是把流程跑通了,接下来我们需要做的事情还有更多。注意只能先导入数据到es后才能在kibana创建索引。

  

五、获取Nginx access日志

  Nginx日志格式在logstash的grok里面默认是没有的,需要我们手动配置,可以通过http://grokdebug.herokuapp.com/ 在线工具来判断配置是否正确。

5.1 在nginx服务器上安装filebeat

  服务器: 172.16.200.160  

1
2
3
4
# tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz
# mv filebeat-5.6.3-linux-x86_64 /data/filebeat
# cd /data/filebeat
# cp filebeat.yml filebeat.yml.bak

  修改filebeat配置文件

1
2
3
4
5
6
7
8
# cat filebeat.yml | grep -v ^$ | grep -v ^# | grep -v "#"
filebeat.prospectors:
- input_type: log
  paths:
    - /data/nginx/logs/160_access.log
   document_type: nginx_access
output.logstash:
  hosts: ["172.16.220.248:5044"]

  启动filebeat

1
# ./filebeat & 

5.2 重新配置logstash启动配置文件

  nginx日志格式,根据业务要求,我们这做了一些修改,比如增加cookie等,修改access.log日志时间格式等,这个会在另外的博客中写出来,会给出链接的。

  nginx日志中添加cookie信息

  nginx改变access.log中的时间格式

  Nginx日志格式  

1
2
3
4
5
6
7
8
log_format main
                '[$time_local] - $remote_addr:$remote_port - $upstream_addr $upstream_status $upstream_response_time - '
                '"$request" $status $bytes_sent $request_time '
                '"$http_referer" - "$http_user_agent" - '
                '"$customerTag_cookie" - "$ym_cookie" - "$http_cookie" '
                '"$http_x_forwarded_for"';
 
# 这里只是我们自己的格式,各位可以根据自己要求增删

  grok使用表达式

  可能我理解不是很到位,写的也比较复杂,我会把匹配对应项一一写出来,大家可以自己理解,然后为自己的项目配置

1
%{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip}

  grok匹配说明

1
%{SYSLOG5424SD}
时间格式
1
%{IPV4:clientip}
获取ip,clientip是自己命名的
1
%{NUMBER:clientport}
NUMBER匹配数字
1
%{INT:upstream_status}
INT整形
1
%{WORD:method}
WORD单词
1
%{URIPATHPARAM:request}
获取请求内容request
1
%{QS:url}
 QS可以获取一段字符串

  修改logstash启动配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
input {
    beats {
      port => "5044"
    }
 
}
 
 
filter {
    if [type] == "nginx_access" {
 
    grok {
        match => {"message" => "%{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip}"}
      }
     
 
    mutate {
       remove_field => "message"   # 把message字段去掉,它会将上面单项获取的信息做个汇总,这样就重复了
    }
 
  }
 
}
 
output {
   elasticsearch {
   hosts => "172.16.220.248:9200"
  }
#stdout { codec => rubydebug }
}

  测试一下配置文件

1
./logstash -t -f ../config/logstash.conf

  

    重启logstash

  不出问题elasticsearch 和kibana中就会有数据了

单机安装ELK的更多相关文章

  1. ELK学习实验002:Elasticsearch介绍及单机安装

    一 简介 ElasticSearch是一个基于Luncene的搜索服务器.它提供了一个分布式多用户能力全文搜索引擎,基于RESTful web接口,ElsticSearch使用Java开发的,并作为A ...

  2. Linux下单机部署ELK日志收集、分析环境

    一.ELK简介 ELK是elastic 公司旗下三款产品ElasticSearch .Logstash .Kibana的首字母组合,主要用于日志收集.分析与报表展示. ELK Stack包含:Elas ...

  3. (原) 1.1 Zookeeper单机安装

    本文为原创文章,转载请注明出处,谢谢 zookeeper 单机安装配置 1.安装前准备 linux系统(此文环境为Centos6.5) Zookeeper安装包,官网https://zookeeper ...

  4. Windows 安装ELK

    在Windows服务器上安装ELK logstash在windows平台下不能监控磁盘文件,用nxlog代替,监控文件并把内容发送到logstash 部署环境 Os :Windows 7 logsta ...

  5. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  6. Ubuntu 下 Neo4j单机安装和集群环境安装

    1. Neo4j简介 Neo4j是一个用Java实现的.高性能的.NoSQL图形数据库.Neo4j 使用图(graph)相关的概念来描述数据模型,通过图中的节点和节点的关系来建模.Neo4j完全兼容A ...

  7. CentOS 7.x安装ELK(Elasticsearch+Logstash+Kibana)

    第一次听到ELK,是新浪的@ARGV 介绍内部使用ELK的情况和场景,当时触动很大,原来有那么方便的方式来收集日志和展现,有了这样的工具,你干完坏事,删除日志,就已经没啥作用了. 很多企业都表示出他们 ...

  8. Hbase单机安装部署

    Hbase单机安装部署 http://blogxinxiucan.sh1.newtouch.com/2017/07/27/Hbase单机安装部署/ 下载Hbase Hbase官网下载地址 http:/ ...

  9. 单机安装Hadoop

    单机安装hadoop ------------------------------------------------------------------ 操作系统:centos7 64 位 hado ...

随机推荐

  1. 毕业设计 之 三 mooodle及bigbluebutton使用笔记(未完成)

    毕业设计 之 三 mooodle及bigbluebutton使用笔记 作者:20135216 平台:windows10 备注:N把辛酸泪 附:在准备过程中其他的一些零碎小问题 一.关于moodle 1 ...

  2. [2017BUAA软工]个人项目

    软工个人项目 一.Github项目地址 https://github.com/Lydia-yang/2017BUAA-SoftwareEngineering 二.解题思路 在刚开始拿到题目的时候,关于 ...

  3. 『编程题全队』Scrum 冲刺博客

    1.介绍小组新加入的成员,Ta担任的角色 Answer: 我们小组的倪兢飞同学决定跳槽到团队あ,我们小组开了一个简短而又严肃的会议,满足倪兢飞同学的意愿,并感谢他为团队做出的巨大贡献.虽然我们遗失了一 ...

  4. .NET Framework 版本和依赖关系[微软官方文档]

    .NET Framework 版本和依赖关系 微软官方文档: https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/ver ...

  5. iphone 与 PC端电脑投屏设置

    1. iphone端安装: 屏幕投影助手 下载地址 https://itunes.apple.com/cn/app/ping-mu-tou-ying-zhu-shou/id1152332174?mt= ...

  6. PHP IF ELSE简化/三元一次式的使用

    一般我们会这样写: <? if($_GET['time']==null) { $time = time(); } else { $time = $_GET['time']; } echo $ti ...

  7. js 实现List

    js 实现List 列表是一组有序的数据.每个列表中的数据项称为元素.在 JavaScript 中,列表中的元素可以是任意数据类型. 我们可以根据数组的特性来实现List. List 抽象数据类型定义 ...

  8. 如果filename的value有值 说明支持存储

    如果filename的value有值 说明支持存储

  9. ZJOI2019 Day1 题解

    想要继续向前,就从克服内心的恐惧开始. 麻将 题意 在麻将中,我们称点数连续的三张牌或三张点数一样的成为面子,称两张点数一样的牌为对子.一副十四张麻将牌的胡牌条件是可以分成四个面子和一个对子或者分成七 ...

  10. Luogu4221 WC2018州区划分(状压dp+FWT)

    合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通.显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了. 考虑状压dp.设f[S]为S集合所有划分方 ...