ELK部署+filebeat应用

系统配置:CentOS Linux release 7.6.1810 (2核1536M,机器配置问题,容易踩很多坑,特别是低配置,jvm参数可能需要去调整,不然起不来)
ELK版本:7.10.2
elastic官网地址:https://www.elastic.co/cn/
elastic产品地址:https://www.elastic.co/cn/elastic-stack
yum源地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/

前言

日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。

简介

ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

在elasticsearch中,所有节点的数据是均等的。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

版本说明

Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。

常见的几种架构

1 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。

2 Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。

YUM安装

(ELK安装需要以非root安装)

1. 配置JDK环境

下载jdk-17.0.2 ,自行下载,下载过程此处忽略

1. 安装jdk
>rpm -ivh jdk-17_linux-x64_bin.rpm

2. 设置环境变量
>vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/java/jdk-17.0.2
    export PATH=$JAVA_HOME/bin:$PATH

3. 刷新profile
>source /etc/profile.d/java.sh

2. 配置ELK yum源

>vim /etc/yum.repos.d/ELK.repo
  [ELK]
  name=ELK-Elasticstack
  baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/
  gpgcheck=0
  enabled=1

3. 部署elasticsearch

3.1.安装elasticsearch
>yum install -y elasticsearch-7.10.2
3.2.修改配置文件
>vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-es
node.name: node-1
path.data: /data/elk/es/data
path.logs: /data/elk/es/logs
network.host: 192.168.1.103
http.port: 9200
discovery.seed_hosts: ["zns"]
cluster.initial_master_nodes: ["node-1"]


(备注:discovery.seed_hosts cluster.initial_master_nodes 参数需要配置下,遇到过坑,那个elasticsearch一直启动超时,排查好长时间,最后在my-es.log 日志找到:the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured  导致bootstrap checks failed 启动检查失败)
3.3.创建数据库及日志目录
>mkdir -p /data/elk/es/data
>mkdir -p /data/elk/es/logs

3.4.修改目录权限
>chown -R elasticsearch:elasticsearch /data/elk/es
>chown -R elasticsearch:elasticsearch /usr/share/elastsearch
3.5.限制资源使用
>vim /etc/security/limits.conf
  elasticsearch soft memlock unlimited
  elasticsearch hard memlock unlimited
  elasticsearch soft nofile 65536
  elasticsearch hard nofile 65536
3.6.配置防火墙规则
##对于elasticsearch端口,限制IP访问
>firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.101" port protocol="tcp" port="9200" accept"
>firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.101" port protocol="tcp" port="9300" accept"
>firewall-cmd --reload
3.7.启动elasticsearch
>systemctl restart elasticsearch.service

3.8.查看端口监听
>netstat -anpt

3.9.查看是否已运行,若出现如下数据,则安装成功
curl http://192.168.1.103:9200
{
  "name" : "node-1",
  "cluster_name" : "my-es",
  "cluster_uuid" : "Pdo-m7tHTNufWxcwRkj9qQ",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

4. elasticsearch部分配置

文件名说明
/etc//elasticsearch/elasticsearch.yml

es的主配置文件

 /usr/share/elasticsearch/yum安装默认的家目录
/etc/sysconfig/elasticsearches 启动相关的一些参数,jvm参数可以这里修改
/usr/lib/systemd/system/elasticsearch.servicees 的systemctl 管理配置

       

5. elasticsearch部分配参数说明

属性名说明
cluster.name配置elasticsearch的集群名称。
node.name节点名,es会默认随机指定一个名字,用户可自行配置。
path.data设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号分隔。
path.logs设置日志文件的存储路径,默认是es根目录下的logs文件夹。
path.conf设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch。
path.plugins设置插件的存放路径,默认是es根目录下的plugins文件夹。
bootstrap.memory_lock设置为true可以锁住ES使用的内存,避免内存进行swap。
network.host设置bind_host和publish_host,设置为0.0.0.0允许所有外网访问。
http.port设置对外服务的http端口,默认为9200。
transport.tcp.port集群结点之间通信端口,默认为9300。
discovery.zen.ping.timeout设置ES自动发现节点连接超时的时间,默认为3S。    
discovery.zen.minimum_master_nodes主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。
discovery.seed_hosts集群发现,配置该节点会与哪些候选地址进行通信,hostname,ip,ip+port,比如:[“127.0.0.1:9300”]。
cluster.initial_master_nodes当你第一次启动全新的Elasticsearch集群时,会有一个集群引导(cluster bootstrapping)步骤,这个步骤会确定一个在第一次选举中投票被计数的、并且可以成为master节点的集合。在开发模式,如果没有配置 discovery settings,该步骤由节点自身自动执行。因为这种自动引导本质上是不安全的,当您在生产模式下启动一个全新的集群时,你必须显式指定那些可以成为master节点的名称或者IP地址,这些节点应该在第一次选举中计算选票数。

4. 部署kibana

Kibana是node.js 编写的,不需要java环境。直接安装即可。

4.1.安装kibana
>yum install -y kibana-7.10.2
4.2.修改配置文件
>vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.1.103:9200"]
kibana.index: ".kibana"
logging.timezone: Asia.Shanghai
4.3.添加防火墙规则
>firewall-cmd --add-port=5601/tcp --permanent
>firewall-cmd --reload
4.4.启动kibana
>systemctl restart kibana.service
4.5.访问kibana
浏览器访问:http://192.168.1.103:5601  ,出现welcome to kibana 页面就安装成功了

5. 部署logstash

5.1.安装logstash
>yum install logstash-7.10.2 -y
5.2.修改配置文件
>vim /etc/logstash/logstash.yml
path.data: /data/elk/logstash/data
pipeline.ordered: auto
http.host: 0.0.0.0
http.port: 9600-9700
path.logs: /data/elk/logstash/logs
5.3.创建目录
>mkdir -p /data/elk/logstash/{data,logs}
>chown -R logstash.logstash /data/elk/logstash
5.4.增加配置(根据实际来配置)
>cp /etc/logstash/logstash-sample.conf /etc/logstash/conf.d/logstash.conf
>vim /etc/logstash/conf.d/logstash.conf
input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://192.168.1.103:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}
5.5.添加防火墙规则
>firewall-cmd --add-port=5400/tcp --permanent
>firewall-cmd --add-port=9600/tcp --permanent
>firewall-cmd --reload
5.6.将logstash加入linux的service中,让其使用服务的方式运行
#logstash最常见的运行方式即命令行运行./bin/logstash -f logstash.conf然后通过ctrl+c结束

#修改startip.optins文件
>vim /etc/logstash/startup.options
JAVACMD=/usr/java/jdk-17.0.2/bin/java
LS_HOME=/usr/share/logstash
LS_SETTINGS_DIR=/etc/logstash
LS_OPTS="--path.settings ${LS_SETTINGS_DIR}"
LS_JAVA_OPTS=""
LS_PIDFILE=/var/run/logstash.pid
LS_USER=logstash
LS_GROUP=logstash
LS_GC_LOG_FILE=/var/log/logstash/gc.log
LS_OPEN_FILES=16384
LS_NICE=19
SERVICE_NAME="logstash"
SERVICE_DESCRIPTION="logstash"

#创建服务
>/usr/share/logstash/bin/system-install
#Successfully created system startup script for Logstash 表示执行成功,并会在这里创建一个配置文件/etc/systemd/system/logstash.service


1)报错:Unrecognized VM option 'UseConcMarkSweepGC'
处理方法:
>vi jvm.options
#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly


#启动服务
设置服务自启动:systemctl enable logstash
启动服务:systemctl start logstash
停止服务:systemctl stop logstash
重启服务:systemctl restart logstash
查看服务状态:systemctl status logstash

>systemctl start logstash

#启动报错:[ERROR] 2022-04-03 15:54:35.501 [main] Logstash - java.lang.IllegalStateException: Logstash stopped processing because of an error: (LoadError) load error: rubygems/security -- java.lang.reflect.InaccessibleObjectException: Unable to make field private java.security.Provider java.security.MessageDigest.provider accessible: module java.base does not "opens java.security" to unnamed module @2c992252

#处理方法:
>export _JAVA_OPTIONS="--add-opens=java.base/java.security=ALL-UNNAMED"

#systemd service方式启动时,需要在service文件额外加环境变量,(Systemd 是所有服务的父进程,/etc/profile等配置的环境变量对其无效)
>vim /etc/systemd/system/logstash.service
...
EnvironmentFile=-/etc/logstash/logstash_jvm_env
...


#/etc/logstash/logstash_jvm_env内容为:
>cat /etc/logstash/logstash_jvm_env
_JAVA_OPTIONS="--add-opens=java.base/java.security=ALL-UNNAMED"
5.7.查看日志
#默认情况下日志会保存在以下两个位置
/var/log/messages

6. 部署filebeat
在需要收集日志的服务器上安装filebeat。

6.1.安装filebeat
>wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-x86_64.rpm
>rpm -ivh filebeat-7.10.2-x86_64.rpm
6.2.修改配置文件(enabled一定要打开,不然不会采集)
>vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/tmp2.txt
- type: filestream
  enabled: false
  paths:
    - /var/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.logstash:
  hosts: ["192.168.1.103:5044"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
6.3.启动filebeat
>systemctl start filebeat

启动失败:error unpacking config data: more than one namespace configured accessing 'output'
这个报错的原因是,output配置了多个重复,这里是前面配置filebeat.yml 通知配置了output.elasticsearch 和output.logstash
处理方法:去掉其中一个output,只保留一个output空间即可。
6.4.启动filebeat后,日志已经传到logstash,但是没有传到elasticsearch,报错了:Could not index event to Elasticsearch. 

处理方法:在logstash的output配置文件里增加了这一段
filter {
  mutate {
    rename => { "[host][name]" => "host" }
  }
}


然后重启logstash让其生效
【备注:问题主要原因是host内包含name引起的。暂时的解决办法就是添加配置进行过滤】

7. kibana查看日志索引

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值