前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安装 ELK 7.1.1

安装 ELK 7.1.1

原创
作者头像
懒人的小脑
修改2019-07-03 17:55:52
2.1K0
修改2019-07-03 17:55:52
举报

写在前面

这是一篇搭建 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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 安装 Elasticsearch
    • 安装前准备
      • 安装 elasticsearch
        • 最简单的 elasticsearch 配置文件
          • 运行 elasticsearch
            • 可能产生的错误以及解决办法
              • 安装elasticsearch-head 插件
              • 安装 Filebeat
              • 安装 Logstash
              • 安装 Kibana(待更新)
              • 附录
              相关产品与服务
              Elasticsearch Service
              腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档