- 一、前置准备
- 1. 部署总览
- 2. 技术选型
- 3. 全局配置
- 4. 软件下载
- 5. 操作声明
- 二、jdk安装
- 2.1. 上传
- 2.2. 解压
- 2.3. 设置环境变量
- 三、zk集群
- 3.1. 上传
- 3.2. 解压
- 3.3. 创建目录
- 3.4. 编辑配置
- 3.5. 添加配置
- 3.6. myid
- 3.8. 关闭防火墙
- 3.9. 启动zk
- 3.10. 监控状态
- 3.11. 效果图
- 四、kafka集群
- 4.1. 上传
- 4.2. 解压
- 4.3. 数据目录
- 4.4. 修改kafka的配置文件
- 4.5. 依次启动kafka
- 五、 验证集群
- 5.1. 创建topic
- 5.2. 启动生产者
- 5.3. 启动消费者
- 5.4. 生产消息
- 5.5. 消费消息
- 六、filebeat
- 6.1.上传
- 6.2. 解压
- 6.3. 修改配置
- 6.5. 启动filebeat
- 七、logstash
- 7.1. 上传
- 7.2. 解压
- 7.3. 新建配置
- 7.4. 启动logstash
- 7.5. 参数说明
- 八、es集群
- 8.1. 上传
- 8.2. 解压
- 8.3. 编辑配置
- 8.4. 修改系统参数
- 8.5. 启动es
- 8.6. 监控日志
- 8.7. 效果图
- 九、node.js+镜像
- 9.1. 下载node.js
- 9.2. 解压
- 9.3. 重命名
- 9.4. 创建软连接
- 9.5. 验证
- 9.6. cnpm镜像
- 9.7. cnpm软连接
- 十、安装es-head插件
- 10.1. 下载插件
- 10.2. 解压
- 10.3. 安装依赖
- 10.4. 配置
- 10.5. 启动插件
- 十一、安装kibana
- 11.1. 上传到app目录并解压
- 11.2. 修改配置
- 11.3. 启动kibana
- 11.4. 验证elk是否安装成功
- 11.5. 防火墙配置
| 服务器 | 部署组件 | 开放端口 |
|---|---|---|
| 192.168.159.136 | filebeat es kafka zookeeper kibana | zookeeper:2181、2888、3888 kafka:9092 es:9200、9300、9100 kibana:5601 |
| 192.168.159.137 | es kafka zookeeper logstash | zookeeper:2181、2888、3888 kafka:9092 es:9200、9300、9100 kibana:5601 |
| 192.168.159.138 | es kafka zookeeper nodejs | zookeeper:2181、2888、3888 kafka:9092 es:9200、9300、9100 kibana:5601 |
| 软件 | 版本 |
|---|---|
| jdk | 1.8.0_301 |
| zookeeper | 3.4.10 |
| kafka | 2.12-2.1.1 |
| filebeat | 6.7.2 |
| logstash | 6.7.2 |
| elasticsearch | 6.7.2 |
| kibana | 6.7.2 |
| filebeat | 6.7.2 |
# 136节点、137节点、138节点同时操作: # 1. 使用root用户进行登录 # 创建 /app目录 mkdir /app 如果/app已经存在忽略次操作 # 2. 创建用户 useradd app passwd app # 密码:Elk123456 # 如果用户已经存在忽略次操作直接使用app用户登录即可 跳过3的第一个命令 # 赋予权限: chown app.app /app -R # 调整家目录: vim /etc/passwd # 切换app用户 su - app4. 软件下载
zookeeper-3.4.10.tar.gz
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
kafka_2.12-2.1.1.tgz
wget https://archive.apache.org/dist/kafka/2.1.1/kafka_2.12-2.1.1.tgz
filebeat-6.7.2-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.7.2-linux-x86_64.tar.gz
logstash-6.7.2.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.2.tar.gz
elasticsearch-6.7.2.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.2.tar.gz
kibana-6.7.2-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.7.2-linux-x86_64.tar.gz5. 操作声明
默认使用app用户,如果使用root用户操作会进行说明。
二、jdk安装2.1. 上传136节点、137节点、138节点同时操作
上传jdk压缩包jdk-8u301-linux-x64.tar.gz到/app 目录下
2.2. 解压cd /app tar -zxvf jdk-8u301-linux-x64.tar.gz2.3. 设置环境变量
- 切换到root用户执行命令
su - root
- 编辑文件
vi /etc/profile
- 修改环境变量
export JAVA_HOME=/app/jdk1.8.0_301 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
- 刷新环境变量
source /etc/profile
- 切换app用户
su - app
- 验证版本
java -version
------------------------------以下均使用app用户操作------------------------------
三、zk集群3.1. 上传136节点、137节点、138节点同时操作
上传Zookeeper安装包到/app目录
3.2. 解压cd /app tar -zxvf zookeeper-3.4.10.tar.gz3.3. 创建目录
- 创建data及logs目录
cd /app/zookeeper-3.4.10 mkdir dataDir mkdir dataLogDir3.4. 编辑配置
cd /app/zookeeper-3.4.10/conf cp zoo_sample.cfg zoo.cfg vi zoo.cfg3.5. 添加配置
修改内容为:(此处三台服务器配置相同),建议同时操作
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/app/zookeeper-3.4.10/data dataLogDir=/app/zookeeper-3.4.10/data clientPort=2181 server.1=192.168.159.136:2888:3888 server.2=192.168.159.137:2888:3888 server.3=192.168.159.138:2888:38883.6. myid
- 第一台服务器中添加myid文件
echo "1" > /app/zookeeper-3.4.10/dataDir/ myid
- 第二台服务器中添加myid文件
echo "2" > /app/zookeeper-3.4.10/dataDir/myid
- 第三台服务器中添加myid文件
echo "3" > /app/zookeeper-3.4.10/dataDir/myid3.8. 关闭防火墙
systemctl stop firewalld3.9. 启动zk
3个节点依次启动
cd /app/zookeeper-3.4.10/ bin/zkServer.sh start3.10. 监控状态
bin/zkServer.sh status
zookeeper启动成功图片(图3.1)如下:无报错,Mode为leader或者follower都可以
3.11. 效果图
上传kafka安装包kafka_2.12-2.1.1.tgz到/app 目录下`
4.2. 解压tar -zxvf kafka_2.12-2.1.1.tgz4.3. 数据目录
- 进入到kafka安装目录下,创建data文件夹
cd kafka_2.12-2.1.1/ mkdir data4.4. 修改kafka的配置文件
vim config/server.properties
- 136节点
#broker的id broker.id=1 #绑定服务器ip host.name=192.168.159.136 listeners=PLAINTEXT://192.168.159.136:9092 advertised.listeners=PLAINTEXT://192.168.159.136:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 #保存数据的目录路径 log.dirs=/app/kafka_2.12-2.1.1/data/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 #设置日志留存策略 log.retention.hours=168 log.retention.bytes=10737420000 #日志段大小 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 #配置zookeeper,ip表示zookeeper集群中各个节点ip zookeeper.connect=192.168.159.136:2181,192.168.159.137:2181,192.168.159.138:2181 zookeeper.connection.timeout.ms=6000 message.max.byte=52428880 group.initial.rebalance.delay.ms=0 #设置删除topic auto.create.topics.enable = false delete.topic.enable=true log.cleanup.policy=delete log.segment.delete.delay.ms=0
- 137节点
#broker的id broker.id=2 #绑定服务器ip host.name=192.168.159.137 listeners=PLAINTEXT://192.168.159.137:9092 advertised.listeners=PLAINTEXT://192.168.159.137:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 #保存数据的目录路径 log.dirs=/app/kafka_2.12-2.1.1/data/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 #设置日志留存策略 log.retention.hours=168 log.retention.bytes=10737420000 #日志段大小 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 #配置zookeeper,ip表示zookeeper集群中各个节点ip zookeeper.connect=192.168.159.136:2181,192.168.159.137:2181,192.168.159.138:2181 zookeeper.connection.timeout.ms=6000 message.max.byte=52428880 group.initial.rebalance.delay.ms=0 #设置删除topic auto.create.topics.enable = false delete.topic.enable=true log.cleanup.policy=delete log.segment.delete.delay.ms=0
- 138节点
#broker的id broker.id=3 #绑定服务器ip host.name=192.168.159.138 listeners=PLAINTEXT://192.168.159.138:9092 advertised.listeners=PLAINTEXT://192.168.159.138:9092 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 #保存数据的目录路径 log.dirs=/app/kafka_2.12-2.1.1/data/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 #设置日志留存策略 log.retention.hours=168 log.retention.bytes=10737420000 #日志段大小 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 #配置zookeeper,ip表示zookeeper集群中各个节点ip zookeeper.connect=192.168.159.136:2181,192.168.159.137:2181,192.168.159.138:2181 zookeeper.connection.timeout.ms=6000 message.max.byte=52428880 group.initial.rebalance.delay.ms=0 #设置删除topic auto.create.topics.enable = false delete.topic.enable=true log.cleanup.policy=delete log.segment.delete.delay.ms=04.5. 依次启动kafka
- 136/137/138节点依次启动
cd /app/kafka_2.12-2.1.1/ nohup bin/kafka-server-start.sh config/server.properties &
5.1. 创建topic验证集群是否安装成功
在其中一个节点上创建一个topic:
- 这里演示采用136节点,创建一个topic:
cd /app/kafka_2.12-2.1.1/ bin/kafka-topics.sh --zookeeper 192.168.159.136:2181,192.168.159.137:2181,192.168.159.138:2181 --create --topic test2 --partitions 3 --replication-factor 15.2. 启动生产者
- 在其中一个节点上启动kafka生产者
这里演示采用136节点:
cd /app/kafka_2.12-2.1.1/ bin/kafka-console-producer.sh --broker-list 192.168.159.136:9092 --topic test25.3. 启动消费者
- 在集群其他的节点上启动消费者,这里演示采用137和138节点:
137节点:
cd /app/kafka_2.12-2.1.1/ bin/kafka-console-consumer.sh --bootstrap-server 192.168.159.137:9092 --topic test2
138节点:
cd /app/kafka_2.12-2.1.1/ bin/kafka-console-consumer.sh --bootstrap-server 192.168.159.138:9092 --topic test25.4. 生产消息
Kafka生产者发送一条消息,看能否在消费端能够接收到消息,如果都能接收到消息表示kafka集群可用。
这里演示场景:136节点 作为生产者发送消息 137节点和138节点作为消费者消费消息
137节点作为消费者消费消息
138节点作为消费者消费消息
从以上截图中,可以看出136节点作为消费者发送消息“send msg 123456”,137节点和138节点作为消费者可以正常接收消息。
6.1.上传登录136节点,使用app用户操作
- filebeat-6.7.2-linux-x86_64.tar.gz文件,并上传app
cd /app tar -zxvf filebeat-6.7.2-linux-x86_64.tar.gz6.3. 修改配置
- 修改filebeat.yml配置文件如下
vim /app/filebeat-6.7.2-linux-x86_64/filebeat.yml
- 修改path路径
/app/test.log
- Elasticsearch output这里的配置需要修改
修改前:
修改后:
nohup /app/filebeat-6.7.2-linux-x86_64/filebeat -e -c /app/filebeat-6.7.2-linux-x86_64/filebeat.yml &七、logstash 7.1. 上传
下载logstash-6.7.2.tar.gz文件,并上传app目录
7.2. 解压tar -zxvf logstash-6.7.2.tar.gz7.3. 新建配置
- 新建config目录下配置文件kafkaInput_esOutPut.conf
vim /app/logstash-6.7.2/config/kafkaInput_esOutPut.conf
内容如下:
input {
kafka {
bootstrap_servers => "192.168.159.136:9092,192.168.159.137:9092,192.168.159.138:9092"
group_id => ["elk"]
topics => ["app-log"]
auto_offset_reset => "latest"
consumer_threads => 5
decorate_events => true
}
}
output {
stdout {codec => rubydebug}
elasticsearch {
hosts => ["192.168.159.136:9200,192.168.159.137:9200,192.168.159.138:9200"]
index => "kafka-logs-%{+YYYY-MM-dd}"
flush_size => 20000
idle_flush_time => 10
sniffing => true
template_overwrite => true
}
}
7.4. 启动logstash
cd /app/logstash-6.7.2 nohup bin/logstash -f /config/kafkaInput_esOutPut.conf --config.reload.automatic &7.5. 参数说明
--config.reload.automatic 选项的意思是启用自动配置加载,以至于每次修改完配置文件以后无需停止然后重启Logstash
查看进程是否启动成功
ps -ps |grep logstash八、es集群 8.1. 上传
上传到/app目录
8.2. 解压cd /app tar -zxvf elasticsearch-6.7.2.tar.gz8.3. 编辑配置
vim /app/elasticsearch-6.7.2/config/elasticsearch.yml
- 修改配置文件config/elasticsearch.yml
- 136节点
# ======================== Elasticsearch Configuration ========================= cluster.name: es-application node.name: node-1 path.data: /app/elasticsearch-6.7.2/data path.logs: /app/elasticsearch-6.7.2/logs network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.159.136:9300", "192.168.159.137:9300","192.168.159.138:9300"] discovery.zen.minimum_master_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
- 137节点
# ======================== Elasticsearch Configuration ========================= cluster.name: es-application node.name: node-2 path.data: /app/elasticsearch-6.7.2/data path.logs: /app/elasticsearch-6.7.2/logs network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.159.136:9300", "192.168.159.137:9300","192.168.159.138:9300"] discovery.zen.minimum_master_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
- 138节点
# ======================== Elasticsearch Configuration ========================= cluster.name: es-application node.name: node-3 path.data: /app/elasticsearch-6.7.2/data path.logs: /app/elasticsearch-6.7.2/logs network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["192.168.159.136:9300", "192.168.159.137:9300","192.168.159.138:9300"] discovery.zen.minimum_master_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE8.4. 修改系统参数
3个节点同时操作,切换root用户修改系统参数,执行如下命令
su - root
- 第一处
echo "vm.max_map_count=655360" >> /etc/sysctl.conf && /sbin/sysctl -p
- 第二处
vim /etc/security/limits.conf
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 40968.5. 启动es
3给节点依次启动es
su - app cd /app/elasticsearch-6.7.2 bin/elasticsearch -d8.6. 监控日志
tail -f logs/es-application.log8.7. 效果图
http://192.168.159.136:9200/
http://192.168.159.137:9200/
http://192.168.159.138:9200/
http://192.168.159.136:9200/_cat/health
9.1. 下载node.js登录138节点,使用root用户操作,官网下载node.js
https://nodejs.org/en/download/
- 下载
wget https://nodejs.org/dist/v16.13.1/node-v16.13.1-linux-x64.tar.xz9.2. 解压
tar -xvf node-v16.13.1-linux-x64.tar.xz9.3. 重命名
mv node-v16.13.1-linux-x64 nodejs9.4. 创建软连接
ln -s /app/nodejs/bin/node /usr/bin/node ln -s /app/nodejs/bin/npm /usr/bin/npm9.5. 验证
验证node.js是否安装成功
node -v9.6. cnpm镜像
- 使用cnpm操作
npm install -g cnpm --register=https://register.npm.taobao.org9.7. cnpm软连接
ln -s /app/nodejs/bin/cnpm /usr/bin/cnpm十、安装es-head插件 10.1. 下载插件 10.2. 解压
unzip elasticsearch-head-master.zip10.3. 安装依赖
cd elasticsearch-head-master cnpm install10.4. 配置
- 现在head插件还无法连接到es,需要修改以下配置文件
vim /app/elasticsearch-head-master/Gruntfile.js10.5. 启动插件
cd /app/elasticsearch-head-master目录下 npm run start
安装完成,输入对应地址显示如下结果:
http://192.168.159.138:9100/
http://192.168.159.138:9200/
11.1. 上传到app目录并解压登录136节点,使用app用户操作
tar -zxvf kibana-6.7.2-linux-x86_64.tar.gz11.2. 修改配置
- 修改config/kibana.yml配置文件
cd /app vim kibana-6.7.2-linux-x86_64/config/kibana.yml
末尾添加如下配置:
server.host为当前机器ip
server.port: 5601 server.host: "192.168.159.136" elasticsearch.hosts: ["http://192.168.159.136:9200","http://192.168.159.137:9200","http://192.168.159.138:9200"]11.3. 启动kibana
切换到bin目录启动nohup ./kibana &
cd /app/kibana-6.7.2-linux-x86_64/ nohup bin/kibana &
http://192.168.159.136:5601/app/kibana
咱们在logstash的配置文件中配置的topic是app-log
- 创建topic
cd /app/kafka_2.12-2.1.1/bin/ ./kafka-console-consumer.sh --bootstrap-server 192.168.159.138:9092 --topic app-log
- 创建消费组
- 137节点:
cd /app/kafka_2.12-2.1.1/bin/ ./kafka-console-consumer.sh --bootstrap-server 192.168.159.138:9092 --topic app-log --consumer-property group.id=elk
- 138节点:
cd /app/kafka_2.12-2.1.1/bin/ ./kafka-console-consumer.sh --bootstrap-server 192.168.159.138:9092 --topic app-log --consumer-property group.id=elk
- 测试
- 1.往136节点/app/test.log文件写入一行数字,之后查看es中是否可以查询到
cd /app echo "123456789033333" >> test.log cat test.log
/app/kafka_2.12-2.1.1/bin/kafka-consumer-groups.sh --bootstrap-server 192.168.159.138:9092 --group elk --describe
- 2.es查询到了
- 3.kibana也成功抓取到了
- 136/137/138节点:
firewall-cmd --zone=public --add-port=2181/tcp --permanent firewall-cmd --zone=public --add-port=2888/tcp --permanent firewall-cmd --zone=public --add-port=3888/tcp --permanent firewall-cmd --zone=public --add-port=9092/tcp --permanent firewall-cmd --zone=public --add-port=9100/tcp --permanent firewall-cmd --zone=public --add-port=9200/tcp --permanent firewall-cmd --zone=public --add-port=9300/tcp --permanent firewall-cmd --zone=public --add-port=5601/tcp --permanent firewall-cmd --reload



