实战 Elastic Stack - ELK 部署与配置

  • 系统环境:CentOS Linux release 7.5.1804 (Core)
  • 服务器数量:8 台

相关软件及版本

jdk-8u181-linux-x64.tar.gz elasticsearch-6.3.2.tar.gz zookeeper-3.4.12.tar.gz kafka_2.10-0.10.0.1.tgz filebeat-6.3.2-linux-x86_64.tar.gz kibana-6.3.2-linux-x86_64.tar.gz logstash-6.3.2.tar.gz

约定

所有安装包放置在 /elk/app 所有软件安装在 /usr/local 的主目录下


JDK的安装

版本:jdk1.8.0_181 涉及的服务器 (c172 to c178) 这里以c172安装JDK为例

解压

tar zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/

添加全局环境变量

vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0_181 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

变量生效

source /etc/profile

验证JAVA版本

java -version

** 同样的步骤完成c173到c178服务器JAVA的安装**


ElasticSearch 的安装与配置

版本:elasticsearch-6.3.2 涉及的服务器 c176 到 c178 (三台) 这里以c176为例

解压

tar zxvf elasticsearch-6.3.2.tar.gz -C /usr/local/

重命名

mv elasticsearch-6.3.2 elasticsearch

创建独立的es用户,名称:elasticsearch, 并授权给 /usr/local/elasticsearch

useradd elasticsearch chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

针对elasticsearch的系统调优

vim /etc/sysctl.conf

加入以下内容

fs.file-max=655360 vm.max_map_count=262144

vim /etc/security/limits.conf

加入以下内容

* soft nproc 204800 * hard nproc 204800 * soft nofile 655360 * hard nofile 655360 * soft memlock unlimited * hard memlock unlimited

vim /etc/security/limits.d/20-nproc.conf

修改内容为

* soft nproc 40960 root soft nproc unlimited

执行下面命令来生效

sysctl -p

logout系统,再重新login,并执行 ulimit -a 查看调优的结果

ulimit -a

JVM调优

vim /usr/local/elasticsearch/config/jvm.options Xms 和Xmx的值,推荐设置为物理内存的一半。(这里都设置为1GB)

创建elasticsearch 的data存放目录

mkdir -p /data1/elasticsearch mkdir -p /data2/elasticsearch chown -R elasticsearch:elasticsearch /data1/elasticsearch chown -R elasticsearch:elasticsearch /data2/elasticsearch

配置elasticsearch

vim /usr/local/elasticsearch/config/elasticsearch.yml

添加以下内容

cluster.name: es node.name: c176 node.master: true node.data: true path.data: /data1/elasticsearch,/data2/elasticsearch path.logs: /usr/local/elasticsearch/logs bootstrap.memory_lock: true network.host: 192.168.199.176 http.port: 9200 discovery.zen.minimum_master_nodes: 1 discovery.zen.ping_timeout: 3s discovery.zen.ping.unicast.hosts: ["192.168.199.176:9300","192.168.199.177:9300","192.168.199.178:9300"]

启动elasticsearch集群, # 注意:确保 /usr/local/elasticsearch 和 /data1/elastisearch 和 /data2/elasticsearch 的授权用户是elasticsearch 用户;启动 elasticsearch服务的时候,必须要切换到 elasticsearch 用户

su - elasticsearch /usr/local/elasticsearch/bin/elasticsearch -d

验证elasticsearch服务启动正常

jps

curl http://192.168.199.176:9200 有如下输出,表明该服务正常

关于elasticsearch的日志文件

/usr/local/elasticsearch/logs/XXX.log (## XXX 代表 cluster.name 的名称)

如果服务不能正常启动,根据日志报错情况来分析,判断和解决。

对c177 和 c178 服务器做同样的 关于 elasticsearch 的安装,配置步骤


ZooKeeper的安装与配置

版本:zookeeper-3.4.12 涉及的服务器 (c172 to c174) 这里以c172安装配置 ZooKeeper 为例

解压, 重命名主目录

tar zxvf zookeeper-3.4.12.tar.gz -C /usr/local/ mv zookeeper-3.4.12 zookeeper

复制zoo_sample.cfg,并重名为zoo.cfg

cd /usr/local/zookeeper/conf cp zoo_sample.cfg zoo.cfg

创建 ZooKeeper 的 data 目录

mkdir -p /data/zookeeper

创建 myid 文件,其内容为1

echo "1" > /data/zookeeper/myid (## 注意对应的c173的值为 2, c174的值为 3;)

配置 zookeeper

vim /usr/local/zookeeper/conf/zoo.cfg

添加以下内容

tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper clientPort=2181 server.1=192.168.199.172:2888:3888 server.2=192.168.199.173:2888:3888 server.3=192.168.199.174:2888:3888

启动ZooKeeper服务, 并通过 jps 或者 ps -ef 来验证服务正常启动

zkServer.sh start jps
ps -ef | grep zookeeper

注意:

ZooKeeper 的日志存放位置与zookeeper启动的时候在同一目录下,名称为 zookeeper.out; 完成同样的 zookeeper 安装配置在 c173, c174 服务器上。


Kafka的安装与配置

版本:kafka_2.10-0.10.0.1 涉及的服务器 (c172 to c174) 这里以c172安装配置 ZooKeeper 为例 注意:Filebeat使用的版本(filebeat-6.3.2)所支持的Kafka版本要对应支持 https://www.elastic.co/guide/en/beats/filebeat/6.3/kafka-output.html

获取kafka安装包

wget https://archive.apache.org/dist/kafka/0.10.0.1/kafka_2.10-0.10.0.1.tgz

解压,重命名

tar zxvf kafka_2.10-0.10.0.1.tgz -C /usr/local/ mv kafka_2.10-0.10.0.1 kafka

创建kafka日志目录

mkdir -p /kafka-logs

配置kafka配置文件

vim /usr/local/kafka/config/server.properties

关键配置项目内容 (c172为例)

broker.id=1 listeners=PLAINTEXT://192.168.199.172:9092 log.dirs=/kafka-logs num.partitions=6 log.retention.hours=60 log.segment.bytes=1073741824 zookeeper.connect=192.168.199.172:2181,192.168.199.173:2181,192.168.199.174:2181 auto.create.topics.enable=true delete.topic.enable=true

启动kafka ( nohup ...... & : 放置于后台运行)

nohup kafka-server-start.sh /usr/local/kafka/config/server.properties &

检测kafka服务

jps

生成的kafka 的日志文件 nohup.out ( 与执行kafka 启动时在同一目录下产生)

同样的步骤对 c173, c174服务器完成kafka 的安装和配置


kafka 基本命令操作

显示topic列表

kafka-topics.sh --zookeeper c172:2181,c173:2181,c174:2181 --list

创建一个topic,并指定topic属性(副本数、分区数等)

kafka-topics.sh --create --zookeeper c172:2181,c173:2181,c174:2181 --replication-factor 1 --partitions 3 --topic xyz

查看某个topic的状态

kafka-topics.sh --describe --zookeeper c172:2181,c173:2181,c174:2181 --topic xyz

生产消息

kafka-console-producer.sh --broker-list c172:9092,c173:9092,c174:9092 --topic xyz

消费消息

kafka-console-consumer.sh --zookeeper c172:2181,c173:2181,c174:2181 --topic xyz kafka-console-consumer.sh --zookeeper c172:2181,c173:2181,c174:2181 --topic xyz --from beginning

删除topic

kafka-topics.sh --zookeeper c172:2181,c173:2181,c174:2181 --delete --topic xyz


Filebeat 的安装与配置

版本:filebeat-6.3.2 涉及的服务器 c171

解压安装,重命名

tar zxvf filebeat-6.3.2-linux-x86_64.tar.gz -C /usr/local/ mv filebeat-6.3.2-linux-x86_64 filebeat

配置filebeat有两种方法:

传统方法:修改filebeat.yml 的配置文件 模块配置:在modules.d 目录下包含了各种模块

在modules.d 下支持的模块列表

这里以修改 filebeat.yml 配置为例

############INPUT################ filebeat.inputs:

  • type: log enabled: true paths:
    • /var/log/messages
    • /var/log/secure fields: log_topic: osmessages name: "192.168.199.171"

############OUTPUT################ output.kafka:

enabled: true hosts: ["192.168.199.172:9092", "192.168.199.173:9092", "192.168.199.174:9092"] version: "0.10" topic: '%{[fields.log_topic]}' partition.round_robin: reachable_only: true worker: 2 required_acks: 1 compression: gzip max_message_bytes: 10000000 logging.level: debug

启动filebeat

nohup ./filebeat -e -c filebeat.yml &

查看输出

tail -f nohup.out

数据过滤的例子, 然后通过 nohup.out可查看结果

processors: - drop_fields: fields: ["beat","host","input","source","offset","prospector" ]

验证 从filebeat的日志传给了kafka 在kafka的服务器上执行:(有一个osmessages的topic)

消费osmessages; 执行以下命令

测试:在任意一台服务器上ssh到c171 (filebeat),随后在上述的屏幕如果有以下输出,表明kafka服务器从filebeat的服务器中获取了数据,并消费了


Logstash的安装,配置

版本:logstash-6.3.2 涉及的服务器 c175

解压安装包,并重命名

tar zxvf logstash-6.3.2.tar.gz -C /usr/local/ mv logstash-6.3.2 logstash

logstatsh只做三件事情 接收数据(input),分析过滤(filter),输出数据(output) 通过插件机制的方式去实现,filter不是必须的,input,output是必须的; 插件:https://github.com/logstash-plugins

input插件:接收数据 filter插件:过滤数据 output插件:输出数据

Logstash 配置文件

jvm.options: JVM内存资源配置文件 logstash.yml:logstash 全局配置文件 logstash 事件配置文件:手工创建

./logstash -e 'input{stdin{}} output{stdout{codec=>rubydebug}}'

或者让logstash通过调用配置文件的方式来实现,

vim testfile.conf

bin/logstash -f testfile.conf

或者放后台运行, 查看nohup.out 的日志

nohup bin/logstash -f testfile.conf &

本例的logstatsh 从kafka接收数据,然后输出给elasticsearch。 创建一个logstash的配置文件

vim kafka_io_es.conf

调用并执行

nohup ./bin/logstash -f ./config/kafka_io_es.conf & tail -f nohup.out


Kibana的安装与配置

版本:kibana-6.3.2 涉及的服务器 c178

解压安装包,并重命名

zxvf kibana-6.3.2-linux-x86_64.tar.gz -C /usr/local mv kibana-6.3.2-linux-x86_64 kibana

配置文件

vim /usr/local/kibana/config/kibana.yml

输入以下内容

server.port: 5601 server.host: "192.168.199.178" elasticsearch.url: "http://192.168.199.176:9200" kibana.index: ".kibana"

启动kibana服务

nohup /usr/local/kibana/bin/kibana &

查看日志

tail -f nohup.out

查看服务进程

ps -ef | grep node

在客户端打开浏览器输入

http://192.168.199.178:5601


总结各服务的开启方式例子

nohup ./filebeat -e -c filebeat.yml & zkServer.sh start nohup kafka-server-start.sh /usr/local/kafka/config/server.properties & nohup ./bin/logstash -f ./config/kafka_io_es.conf elasticsearch -d nohup /usr/local/kibana/bin/kibana &

++++++++++++++++++++++++++++++++++++++++++ 要深刻理解数据流向,各项服务提供的功能 重点和难点:logstash的插件配置(input, filter,output) ++++++++++++++++++++++++++++++++++++++++++