阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7单机部署ELK

248次阅读
没有评论

共计 7054 个字符,预计需要花费 18 分钟才能阅读完成。

一、 简介

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

# 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

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

编辑配置文件

# 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 启动

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

修改 sysctl.conf 文件

# vim /etc/sysctl.conf
vm.max_map_count = 262144
 
# sysctl -p

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

*              soft    nofile          100000
*              hard    nofile          100000
*              soft    nproc          100000
*              hard    nproc          100000

添加 hosts 文件

# vim /etc/hosts
172.16.220.248 node-1

启动

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

查看是否启动

CentOS 7 单机部署 ELK

简单的 curl 测试

# curl http://172.16.220.248:9200

CentOS 7 单机部署 ELK

三、安装 Logstash 和 filebeat

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

3.1 安装 logstash

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

3.2 安装 filebeat

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

# 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 文件

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

启动 filebeat 服务

# cd /data/filebeat
# ./filebeat &

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

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

CentOS 7 单机部署 ELK

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

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

  CentOS 7 单机部署 ELK

3.3 启动 logstash

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

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 不指定配置文件启动

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

CentOS 7 单机部署 ELK

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

指定配置文件启动 logstash

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

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

CentOS 7 单机部署 ELK

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

CentOS 7 单机部署 ELK

 四、安装 kibana

# 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 配置文件

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

启动 kinbana

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

查看端口

CentOS 7 单机部署 ELK

浏览器登入查看

  CentOS 7 单机部署 ELK

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

CentOS 7 单机部署 ELK

五、获取 Nginx access 日志

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

 5.1 在 nginx 服务器上安装 filebeat

服务器:172.16.200.160

# 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 配置文件

# 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

# ./filebeat &

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

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

  Nginx 日志中添加 cookie 信息  http://www.linuxidc.com/Linux/2017-11/148217.htm

Nginx 改变 access.log 中的时间格式  http://www.linuxidc.com/Linux/2017-11/148221.htm

  Nginx 日志格式 ��

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 使用表达式

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

%{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 启动配置文件

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}
}

测试一下配置文件

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

CentOS 7 单机部署 ELK

  重启 logstash

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

        CentOS 7 单机部署 ELK

基于 CentOS 6.9 搭建 ELK 环境指南  http://www.linuxidc.com/Linux/2017-07/145636.htm

Linux 日志分析 ELK 环境搭建  http://www.linuxidc.com/Linux/2017-07/145494.htm

Logstash 监控日志文件时应对日志文件名改变的原理  http://www.linuxidc.com/Linux/2016-08/133994.htm

使用 Elasticsearch + Logstash + Kibana 搭建日志集中分析平台实践  http://www.linuxidc.com/Linux/2015-12/126587.htm

Linux 上安装部署 ElasticSearch 全程记录  http://www.linuxidc.com/Linux/2015-09/123241.htm

Elasticsearch 安装使用教程 http://www.linuxidc.com/Linux/2015-02/113615.htm

ElasticSearch 配置文件译文解析 http://www.linuxidc.com/Linux/2015-02/114244.htm

ElasticSearch 集群搭建实例  http://www.linuxidc.com/Linux/2015-02/114243.htm

分布式搜索 ElasticSearch 单机与服务器环境搭建  http://www.linuxidc.com/Linux/2012-05/60787.htm

ElasticSearch 的工作机制  http://www.linuxidc.com/Linux/2014-11/109922.htm 

CentOS 安装 Logstash 2.2.0 和 Elasticsearch 2.2.0   http://www.linuxidc.com/Linux/2016-03/128794.htm

ElasticSearch 的详细介绍 :请点这里
ElasticSearch 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-11/148222.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计7054字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中