CENTOS7 ELK 5.3.2 elasticsearch logstash kibana filebeat

本文详细介绍如何从零开始搭建ELK(Elasticsearch、Logstash、Kibana)环境,并配置Filebeat来收集日志,最终在Kibana上展示日志分析结果。

ELK 简单的经典场景如下图,其中kafka、logstash是可选的,可根据业务确定是否必要引入。消息队列kafka也可以换成其他MQ,甚至redis。

此图只是为了说明ELK各部分对应的关系,是一个非常简单的示例图。一般正常的生产环境 zookeeper、kafka、elasticsearch都是集群的,logstash也是多节点的。



本文件的内容是没有配消息队列kafka的,其实beat和logstash对kafka可以说是无缝对接,只需在对应的配置文件中进行配置即可。

使用消息队列和集群的文章,本人转载了一篇地址:

http://blog.youkuaiyun.com/stonexmx/article/details/71308393


1.  下载 所需资源

官网 : https://www.elastic.co/downloads

elasticsearch  logstash  kibana  filebeat

JDK1.8 我这之前已经安装

[root@yzb-centos72-3 elk]# ll
total 177340
-rw-r--r-- 1 root root  33725176 May  4 13:04 elasticsearch-5.3.1.zip
-rw-r--r-- 1 root root   8767885 Apr 27 21:46 filebeat-5.3.2-linux-x86_64.tar.gz
-rw-r--r-- 1 root root  38743345 May  4 13:04 kibana-5.3.2-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 100150030 May  4 13:04 logstash-5.3.1.zip

用unzip  解压 zip, tar -xvzf  解压 tar.gz

解压后拷贝到/usr/local/elk

[root@yzb-centos72-3 elk]# ll
total 16
drwxr-xr-x  8 root root 4096 May  4 13:19 elasticsearch-5.3.1
drwxr-xr-x  4 root root 4096 Apr 25 00:08 filebeat-5.3.2-linux-x86_64
drwxrwxr-x 12 1000 1000 4096 Apr 25 00:26 kibana-5.3.2-linux-x86_64
drwxr-xr-x 11 root root 4096 May  4 13:11 logstash-5.3.1
[root@yzb-centos72-3 elk]#


2. 配置 elasticsearch

[root@yzb-centos72-3 bin]# cd /usr/local/elk/elasticsearch-5.3.1/bin
[root@yzb-centos72-3 bin]# ./elasticsearch
[2017-05-04T13:29:55,392][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.3.1.jar:5.3.1]

上面提示是因为不能以root身份运行,创建 elk对应的用户

[root@yzb-centos72-3 bin]# groupadd elkgroup
[root@yzb-centos72-3 bin]# useradd -g elkgroup elkuser
[root@yzb-centos72-3 bin]# passwd elkuser
Changing password for user elkuser.

[root@yzb-centos72-3 bin]# su elkuser
[elkuser@yzb-centos72-3 bin]$ ./elasticsearch

2017-05-04 13:33:17,618 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)

权限不足,修改权限

[root@yzb-centos72-3 local]# chown -R elkuser:elkgroup elk/
[root@yzb-centos72-3 local]# chmod -R 755 elk/

[elkuser@yzb-centos72-3 bin]$ ./elasticsearch
[2017-05-04T13:41:05,712][INFO ][o.e.n.Node               ] [] initializing ...
[2017-05-04T13:41:05,806][INFO ][o.e.e.NodeEnvironment    ] [IHYB5WZ] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [19.3gb], net total_space [24.4gb], spins? [unknown], types [rootfs]
[2017-05-04T13:41:05,807][INFO ][o.e.e.NodeEnvironment    ] [IHYB5WZ] heap size [1.9gb], compressed ordinary object pointers [true]
[2017-05-04T13:41:05,810][INFO ][o.e.n.Node               ] node name [IHYB5WZ] derived from node ID [IHYB5WZKQ4G3Ue6lDUn_ZQ]; set [node.name] to override
[2017-05-04T13:41:05,810][INFO ][o.e.n.Node               ] version[5.3.1], pid[23213], build[5f9cf58/2017-04-17T15:52:53.846Z], OS[Linux/3.10.0-327.28.3.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_121/25.121-b13]

.................

[2017-05-04T13:41:12,407][INFO ][o.e.h.n.Netty4HttpServerTransport] [IHYB5WZ] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
[2017-05-04T13:41:12,413][INFO ][o.e.n.Node               ] [IHYB5WZ] started
[2017-05-04T13:41:12,420][INFO ][o.e.g.GatewayService     ] [IHYB5WZ] recovered [0] indices into cluster_state

本地连接测试

[root@yzb-centos72-3 elk]# curl 127.0.0.1:9200
{
  "name" : "IHYB5WZ",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "irj3hPD7SxGeHDuNz2S-6g",
  "version" : {
    "number" : "5.3.1",
    "build_hash" : "5f9cf58",
    "build_date" : "2017-04-17T15:52:53.846Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.2"
  },
  "tagline" : "You Know, for Search"
}

若想进行远程连接需配置

[root@yzb-centos72-3 config]# vi elasticsearch.yml

network.host: 172.20.4.132

碰到的一些错误及解决办法

[elkuser@yzb-centos72-3 bin]$ ./elasticsearch
[2017-05-04T15:17:30,381][INFO ][o.e.n.Node               ] [] initializing ...
[2017-05-04T15:17:30,420][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/usr/local/elk/elasticsearch-5.3.1/data/elasticsearch]] with lock id [0];maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?

删除 data下的node

[elkuser@yzb-centos72-3 bin]$ cd /usr/local/elk/elasticsearch-5.3.1/data/
[elkuser@yzb-centos72-3 data]$ ll
total 4
drwxr-xr-x 3 elkuser elkgroup 4096 May  4 13:41 nodes
[elkuser@yzb-centos72-3 data]$ rm -fr nodes/
[elkuser@yzb-centos72-3 data]$ ll
total 0

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

修改/etc/security/limits.conf

[root@yzb-centos72-3 bin]# vi /etc/security/limits.conf

# End of file
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 2048


ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改etc/sysctl.conf
[root@yzb-centos72-3 logs]# vi /etc/sysctl.conf

vm.max_map_count=655360

执行 sysctl -p



3. 配置logstash

在config目录下新建logstash.conf

设置filebeat作为日志输入,elasticsearch作为输出

内容:

[root@yzb-centos72-3 config]# more logstash.conf
input {
    beats {
        port => "5043"
    }

}
 filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => [ "172.20.4.132:9200" ]
    }

}



4. 配置filebeat

[elkuser@yzb-centos72-3 filebeat-5.3.2]$ vi filebeat.yml

日志读取目录

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /usr/local/elk/data/logs/*.log

    #- c:\programdata\elasticsearch\logs\*


日志输出位置,默认是ElasticSearch,此处改为logstash

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
 # hosts: ["172.20.4.130:9201","172.20.4.132:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["172.20.4.132:5043"]



5. 配置kibana

[elkuser@yzb-centos72-3 local]$ cd /usr/local/elk/kibana-5.3.2/config/
[elkuser@yzb-centos72-3 config]$ vi kibana.yml
修改elasticsearch的地址

elasticsearch.url: "http://172.20.4.132:9200"

修改访问用的IP

server.host: "172.20.4.132"

后台启动

[elkuser@yzb-centos72-3 bin]$ nohup ./kibana &

访问  http://ip:5601

若界面提示:No default index pattern. You must select or create one to continue.

这是对应的logstash没有配置好

然后进行如下图配置索引模式,因为filebeat.yml中output配置的是logstash,所以pattern是 logstash-*.

若是output配置的是elasticsearch,则parttern是filebeat-*。

其实就是看谁作为elasticsearch的索引源。

为了看效果,我将项目的部分日志文件放到了/usr/local/elk/data/logs目录下,就是之前filebeat配置的日志收集目录



效果如下


多说几句,文章中提到的filebeat,只是elastic公司beats产品中的一项,还有Topbeat、Packetbeat。beats是一个代理,将不同类型的数据发送到elasticsearch。beats可以直接将数据发送到elasticsearch,也可以通过logstash将数据发送elasticsearch。beats有三个典型的例子:Filebeat、Topbeat、Packetbeat。Filebeat用来收集日志,Topbeat用来收集系统基础设置数据如cpu、内存、每个进程的统计信息,Packetbeat是一个网络包分析工具,统计收集网络信息。

其实ELK、Beats场景如下,借用网络的一张图




潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员与工程实践者提供系统化的潮汐建模与计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法与潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期与振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构与预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮与天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库与示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成全流程操作。这套工具集将专业计算能力与人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性与科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
<think>嗯,用户需要一个在openEuler上部署ELK+Kafka+Filebeat的完整教程。这个问题涉及多个组件的协同部署,技术细节相当复杂。用户提供的站内引用很有价值,特别是引用[3]提到了系统优化和目录配置,引用[4]则提供了详细的组件下载链接和用户权限设置。需要特别注意的是,这些引用都是基于CentOS环境的配置,而openEuler作为新兴系统,可能需要调整部分设置。从问题描述看,用户应该是个运维工程师或DevOps人员,正在搭建日志分析系统。用户特别强调"详细教程",说明ta需要可落地的操作指导,且对权限控制(如root和app用户切换)、目录结构等细节要求明确。在技术层面,这个部署需要重点考虑:第一是版本兼容性。ELK组件需版本严格匹配,选择6.7.2版本族较稳妥,用户引用的[4]也采用了这个版本组合。第二是系统差异。openEuler的SELinux策略、firewalld配置与CentOS存在差异,比如默认可能没开放5601端口。第三是内存管理。Elasticsearch的堆内存设置要遵循不超过物理内存50%的原则(引用[3]提到过)。第四是用户权限。必须像引用[4]那样创建专用用户,避免用root运行组件。安装步骤上可以分解为七个主要阶段:准备工作→JDK→ZooKeeper→Kafka→ElasticsearchLogstashKibanaFilebeat。其中ES的配置最复杂,要处理jvm.options、elasticsearch.yml等多个文件,还需安装ik/pinyin分词插件。安全方面需要额外提醒:用户引用中都没提及SSL/TLS配置,但生产环境必须考虑加密通信,特别是Kafka的SASL认证和ES的xpack安全模块。最后生成的注意事项特别重要,比如内核参数调整和filebeat多行日志处理,这些都是实际部署中容易踩坑的点。考虑到用户环境,补充了openEuler特有的firewall-cmd用法。</think> 以下是在 openEuler 系统上部署 Elastic Stack(Elasticsearch/Logstash/Kibana) + Kafka + Filebeat 的详细步骤,结合系统特性和最佳实践: --- ### **一、环境准备** 1. **系统要求** - OpenEuler 20.03 LTS+(已验证版本) - 至少 8GB RAM(生产环境建议 16GB+) - 磁盘空间:50GB+(依据日志量调整) 2. **创建专用用户** ```bash sudo useradd elk -m -s /bin/bash # 创建elk用户 echo "elk:your_password" | sudo chpasswd # 设置密码 sudo chown elk:elk /opt -R # 授权/opt目录 ``` 3. **安装依赖** ```bash sudo dnf install java-11-openjdk-devel wget tar unzip firewalld -y sudo systemctl start firewalld ``` --- ### **二、组件安装与配置** #### **1. ZooKeeper 3.4.10** ```bash wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz tar -xzf zookeeper-3.4.10.tar.gz -C /opt cd /opt/zookeeper-3.4.10/conf cp zoo_sample.cfg zoo.cfg sed -i &#39;s|dataDir=/tmp/zookeeper|dataDir=/opt/zookeeper/data|&#39; zoo.cfg ``` **启动**: ```bash bin/zkServer.sh start ``` #### **2. Kafka 2.3.0** ```bash wget https://archive.apache.org/dist/kafka/2.3.0/kafka_2.12-2.3.0.tgz tar -xzf kafka_2.12-2.3.0.tgz -C /opt cd /opt/kafka_2.12-2.3.0/config echo -e "listeners=PLAINTEXT://:9092\nlog.dirs=/opt/kafka/logs" >> server.properties ``` **启动**: ```bash bin/kafka-server-start.sh -daemon config/server.properties ``` #### **3. Elasticsearch 7.17.5**(推荐兼容版本) ```bash wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.5-linux-x86_64.tar.gz tar -xzf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /opt cd /opt/elasticsearch-7.17.5 ``` **配置修改** (`config/elasticsearch.yml`): ```yaml cluster.name: elk-openEuler node.name: node-1 path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node # 单节点模式 ``` **系统优化**: ```bash sudo sysctl -w vm.max_map_count=262144 # 解决内存映射错误 mkdir -p /data/elasticsearch/{data,logs} chown elk:elk /data/elasticsearch -R ``` **启动**: ```bash su elk -c "/opt/elasticsearch-7.17.5/bin/elasticsearch -d" ``` #### **4. Kibana 7.17.5** ```bash wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.5-linux-x86_64.tar.gz tar -xzf kibana-7.17.5-linux-x86_64.tar.gz -C /opt cd /opt/kibana-7.17.5 ``` **配置修改** (`config/kibana.yml`): ```yaml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"] ``` **开放防火墙端口**: ```bash sudo firewall-cmd --add-port=5601/tcp --permanent sudo firewall-cmd --reload ``` **启动**: ```bash su elk -c "nohup /opt/kibana-7.17.5/bin/kibana > /dev/null &" ``` #### **5. Logstash 7.17.5** ```bash wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.5.tar.gz tar -xzf logstash-7.17.5.tar.gz -C /opt ``` **创建配置文件** (`/opt/logstash-7.17.5/config/kafka_to_es.conf`): ```ruby input { kafka { bootstrap_servers => "localhost:9092" topics => ["logs"] } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "logs-%{+YYYY.MM.dd}" } } ``` **启动**: ```bash su elk -c "/opt/logstash-7.17.5/bin/logstash -f config/kafka_to_es.conf" ``` #### **6. Filebeat 7.17.5** ```bash wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.5-linux-x86_64.tar.gz tar -xzf filebeat-7.17.5-linux-x86_64.tar.gz -C /opt cd /opt/filebeat-7.17.5 ``` **配置修改** (`filebeat.yml`): ```yaml filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log output.kafka: hosts: ["localhost:9092"] topic: logs ``` **启动**: ```bash sudo ./filebeat -e -c filebeat.yml ``` --- ### **三、验证部署** 1. **发送测试数据** ```bash echo "Test log from openEuler" >> /var/test.log ``` 2. **检查Kafka队列** ```bash /opt/kafka_2.12-2.3.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic logs ``` 3. **在Kibana查看日志** 访问 `http://<服务器IP>:5601` → Management → Index Patterns → 创建 `logs-*` 索引模式 --- ### **注意事项** 1. **权限问题** - 所有组件需以 `elk` 用户运行 - 数据目录权限:`chown elk:elk /data -R` 2. **内存限制** Elasticsearch 堆内存配置 (`config/jvm.options`): ``` -Xms4g -Xmx4g # 不超过物理内存50% ``` 3. **分词插件安装**(如需要) ```bash /opt/elasticsearch-7.17.5/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.5/elasticsearch-analysis-ik-7.17.5.zip ``` 4. **多行日志处理** 在 Filebeat 中添加多行合并配置: ```yaml multiline.pattern: &#39;^\[&#39; multiline.negate: true multiline.match: after ``` --- ### **故障排查关键点** 1. Elasticsearch 启动失败 - 检查 `/data/elasticsearch/logs/*.log` - 确认 `vm.max_map_count` 设置 2. Kafka 连接问题 - 验证 ZooKeeper 状态:`echo stat | nc localhost 2181` - 检查防火墙:`sudo firewall-cmd --list-ports` 3. Filebeat 无数据 - 运行调试模式:`sudo ./filebeat -e -c filebeat.yml -d "publish"` > 部署框架基于 ELK Stack 官方文档[^1]与 openEuler 系统适配实践,具体参数需按硬件配置调整[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值