安装 ELK 7.1.1

2019-07-03 17:55:52 浏览数 (1)

写在前面

这是一篇搭建 ELK 集群的文章,主要涉及3大组件 elasticsearch、logstash 和 kibana 以及一个日志收集代理 filebeat的安装,通过部署 ELK 建立对其感性的认识。

ELK 是Elasticsearch、Logstash、Kibana 的简写,用于将不同来源的日志集中整合的一起,建立集中式日志管理集群。

一个完整的集中式日志系统,需要有一下过程:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 警告-能够提供错误报告,监控机制

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。目前,最新的版本是 7.1.1。

主要特点

  • 实时分析
  • 分布式实时文件存储,并将每一个字段都编入索引
  • 文档导向,所有的对象全部是文档
  • 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。见图 2 和图 3
  • 接口友好,支持 JSON

Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)。目前最新的版本是 7.1.1。

主要特点

  • 几乎可以访问任何数据
  • 可以和多种外部应用结合
  • 支持弹性扩展

它由三个主要部分组成

  • Shipper-发送日志数据
  • Broker-收集数据,缺省内置 Redis
  • Indexer-数据写入

Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。目前最新的版本是 7.1.1,并且原生支持中文界面。

Filebeat提供一种轻型的方法用于转发和汇总日志与文件, filebeat替代 logstash-forwarder 接收日志,目前的最新版本是 7.1.1。

实验环境如下:

IP 地址

OS

功能

10.0.12.235

CentOS 7

filebeat

10.0.12.235

CentOS 7

logstash

10.0.12.231

CentOS 7

elasticsearch

10.0.12.243

CentOS 7

kibana

安装 Elasticsearch

安装前准备

elasticsearch 由 java 编写,需要系统中支持 java。

代码语言:txt复制
yum install java -y

获取 elasticsearch 软件包,下载至/usr/local/src 目录。

代码语言:txt复制
wget -P /usr/local/src https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz

创建elasticsearch 的 data 目录和log目录,用于保存 elasticsearch的数据和日志。

代码语言:txt复制
 mkdir -p /data/elasticsearch/{data,log}

创建 elasticsearch 用户,因为 elasticsearch 可以接收用户输入的脚本并执行,所以出于系统安全考虑,elasticsearch 默认禁止 root 用户运行 elasticsearch,需要创建 elasticsearch 用户。

代码语言:txt复制
useradd -d /usr/local/elasticsearch -M elasticsearch

安装 elasticsearch

解压elasticsearch软件包至指定目录/usr/local。

代码语言:txt复制
tar xf /usr/local/src/elasticsearch-7.1.1-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/elasticsearch-7.1.1/ /usr/local/elasticsearch

修改相关目录的属主

代码语言:txt复制
chown -R elasticsearch /usr/local/elasticsearch
chown -R elasticsearch /usr/local/elasticsearch-7.1.1/
chown -R elasticsearch /data/elasticsearch/

最简单的 elasticsearch 配置文件

配置文件:

代码语言:txt复制
cluster.name: my-application          #集群名称
node.name: node-1                     #当前节点的名称       
path.data: /data/elasticsearch/data   #数据存放目录
path.logs: /data/elasticsearch/log    #日志存放目录
network.host: 0.0.0.0                 #监听的地址
http.port: 9200                       #监听端口
cluster.initial_master_nodes: ["node-1"]

运行 elasticsearch

elasticsearch 默认会在前台运行,使用-d选项可以使其后台运行。

代码语言:txt复制
sudo -u elasticsearch /usr/local/elasticsearch/bin/elasticsearch [-d]

可能产生的错误以及解决办法

- 安装 elasticsearch head 插件,提示下载phantomjs-2.1.1失败或解压失败

下载失败:手动下载 phantomjs-2.1.1.tar.bz2文件至/tmp/phantomjs 目录

解压失败:使用 yum 安装 bzip2

- 运行 elasticsearch 报错汇总

错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

     max number of threads [3795] for user [elasticsearch] is too low, increase to at least [4096]

代码语言:javascript复制
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

错误2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

代码语言:javascript复制
# vim /etc/sysctl.conf
vm.max_map_count = 262144
# sysctl -p

切换到 elasticsearch 用户后,显示为“-bash-4.2$”

代码语言:javascript复制
使用 root 用户
cp /etc/skel/.bash* /usr/local/elasticsearch/ 

安装elasticsearch-head 插件

编译安装

代码语言:txt复制
yum install nodejs -y
cd /usr/local/src
git clone https://github.com/mobz/elasticsearch-head.git
cd /usr/local/src/elasticsearch-head
#在 head 插件目录中执行
npm instal

修改 elasticsearch.yml文件,添加如下内容,解决跨域访问问题:

代码语言:txt复制
http.cors.enabled: true
http.cors.allow-origin: "*"

运行 elasticsearch head 插件,监听在9100,提供图形化界面。

代码语言:txt复制
#在 elasticsearch head 目录中运行
npm run start

使用 chrome 扩展

使用谷歌浏览器安装 elasgticsearch-head 插件

chrome浏览器 elasticsearch-head 插件chrome浏览器 elasticsearch-head 插件

安装 Filebeat

下载并安装 filebeat

代码语言:txt复制
wget -P /usr/local/src https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz
tar xf /usr/local/src/filebeat-7.1.1-linux-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/filebeat-7.1.1-linux-x86_64/ /usr/local/filebeat
cp /usr/local/filebeat/filebeat.yml /usr/local/filebeat/filebeat.yml.default #备份原始配置文件

修改 filebeat 配置文件

代码语言:txt复制
filebeat.inputs: #输入至 filebeat
- type: log
  enabled: true
  paths:
   - /var/log/filebeat/*.log #自己指定一个日志文件
output.logstash: #filebeat 输出至 logstash
  hosts: ["LOGSTASH_IP:5044"]

如何让 filebeat 从头读取日志文件 已经运行的 filebeat程序会通过filebeat 程序目录中的/usr/local/filebeat/data/registry记录已经读取的日志文件和位置,对于初期调试,首先停止 filebeat 程序,然后删除此目录,再次运行 filebeat 程序,就可以从头读取指定的日志。

启动 filebeat

代码语言:javascript复制
/usr/local/filebeat/filebeat 

安装 Logstash

下载并解压至相关目录

代码语言:txt复制
wget -P /usr/local/src https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz 
tar xf /usr/local/src/logstash-7.1.1.tar.gz  -C /usr/local/
ln -s /usr/local/logstash-7.1.1/ /usr/local/logstash

创建插件和数据目录mkdir /usr/local/logstash/plugin-data

调整 logstash.yml 配置文件

代码语言:txt复制
#vim /usr/local/logstash/config/logstash.yml
node.name: logstash
path.data: /usr/local/logstash/plugin-data
config.reload.automatic: true #自动更新配置
config.reload.interval: 10 
http.host: "10.0.12.235" #本机 IP 地址

启动 logstash 需要一个配置文件,用来指定日志的输入、过滤和输出。

代码语言:txt复制
# vim /usr/local/logstash/conf/nginx-access.conf
input{
    beats {
        port => "5044"
    }
}

filter {
    grok {
        patterns_dir => ["/usr/local/logstash/pattern"]
        match => {
            "message" => ["%{NGINXACCESS}"]
        }
    }
    geoip {
        source => "client_ip"
    }
    date {
        match => ["Time","dd/MMM/yyyy:HH:mm:ss Z","ISO8601"]
        locale => "cn"
        target => "@timestamp"
    }
}

output {
    elasticsearch {
        hosts => [ "http://10.0.12.236:9200" ]
        index => "logstash-%{type}-%{ YYYY.MM.dd}"
        template_overwrite => true
    }
}

因为过滤的正则表达是太长,所以在单独目录种定义

代码语言:txt复制
mkdir /usr/local/logstash/pattern
vim /usr/local/logstash/pattern/nginx
NGINXACCESS %{IPV4:client_ip}:%{BASE10NUM:client_port}|%{IPV4:X_Forward}s*%{HTTPDATE:Time}s*HTTP/%{BASE10NUM:httpversion}s*%{WORD:verb}s*%{NOTSPACE:url}s*|%{BASE10NUM:Status}|s*%{BASE10NUM:body_bytes_sent}s*%{BASE10NUM:request_time}s*%{NOTSPACE:referer}s*%{QUOTEDSTRING:agent}s*%{IPV4:upstream}:%{BASE10NUM:upstream_port}s*%{BASE10NUM:upstream_response_time}s*%{BASE10NUM:upstream_status}

调试 grok 正则表达式:https://grokdebug.herokuapp.com/

注意 logstash 在启动时,会读取配置目录中所有以 .conf 结尾的文件,各配置文件不要存在错误,即使没有作用。

启动 logstash

代码语言:txt复制
/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/nginx-assess.conf

安装 Kibana(待更新)

附录

日志文件格式,可以根据 此格式生成多条日志记录

代码语言:javascript复制
100.155.1.33:46175|35.136.45.21	10/Jun/2019:15:24:31  0800	HTTP/1.1	GET http://api.XX.XX/xx?XX=	|200|	2460	0.187	"-"	"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Smart_XX 1.0.0 1.0.0"	172.168.32.1:80	0.187	200

0 人点赞