本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本博客是演示基于filebeat->kafka->logstash->elasticsearch->kibana 数据采集及数据可视化分析系统搭建。
包括配置方法、使用实例、运维脚本
zookeeper安装部署
采用伪集群部署 zookeeper版本为:apache-zookeeper-3.6.1-bin.tar.gz
配置:zoo.cfg
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/zk/data/1
dataLogDir=/home/hadoop/zk/logs/1
clientPort=8181
#伪集群部署
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
#为zookeeper添加SASL支持
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/zk/data/2
dataLogDir=/home/hadoop/zk/logs/2
clientPort=8182
#伪集群部署
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
#为zookeeper添加SASL支持
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/zk/data/3
dataLogDir=/home/hadoop/zk/logs/3
clientPort=8183
#伪集群部署
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
#为zookeeper添加SASL支持
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
创建数据和日志目录
cd /home/hadoop/zk
mkdir -p /home/hadoop/zk/data/3
mkdir -p /home/hadoop/zk/data/2
mkdir -p /home/hadoop/zk/data/1
mkdir -p /home/hadoop/zk/logs/1
mkdir -p /home/hadoop/zk/logs/2
mkdir -p /home/hadoop/zk/logs/3
创建myid文件
在dataDir指定目录下创建一个myid文件。
然后分别在myid文件中按照zoo.cfg文件的server.(数字)中数字的数值,
在不同服务器上的myid文件中填写相应的值。例如server.1 在当前机器的myid中就只写上1
#echo 1 > /home/hadoop/zk/data/myid
echo 1 > /home/hadoop/zk/data/1/myid
echo 2 > /home/hadoop/zk/data/2/myid
echo 3 > /home/hadoop/zk/data/3/myid
zk使用
启动
zkServer.sh start ../conf/zoo1.cfg
停止
zkServer.sh stop ../conf/zoo1.cfg
查看状态
zkServer.sh status ../conf/zoo1.cfg
启动客户端
zkCli.sh -server 127.0.0.1:8181
zkCli.sh -server 127.0.0.1:8182
zkCli.sh -server 127.0.0.1:8183
或者
zkCli.sh -server 127.0.0.1:8181,127.0.0.1:8182,127.0.0.1:8183
客户端连接zookeeper集群,可以连接多台也可以连接1台服务器,bin/zkCli.sh -server (ip1或域名1):2181,(ip2域名2):2181,(ip3域名3):2181,
多个ip或域名间用逗号分隔(这里可以使用ip也可以使用域名。)
zookeeper可视化:
-
zookeeper-visualizer (很好使)
-
idea zookeeper插件(不好使,容易卡死)
参考: zookeeper 安装及配置 zookeeper伪集群安装部署
kafka
kafka伪分布式安装部署
kafka版本: kafka_2.11-2.4.1.tgz
server1.properties
#每台机器必须唯一
broker.id=0
#在配置集群的时候必须设置,不然以后的操作会报找不到leader的错误
listeners=INSIDE://0.0.0.0:9091,OUTSIDE://0.0.0.0:8091
# INSIDE指的是broker之间通讯,例如:REPLICATION 与LEADER的通讯,OUTSIDE指的是外部客户端与kafka集群之间的通讯,例如:CLIENT与kafka集群
advertised.listeners=INSIDE://127.0.0.1:9091,OUTSIDE://hostname:8091
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
#broker间通讯的监听器名称。如果未设置,则侦听器名称由security.inter.broker.protocol定义。 同时设置此项和security.inter.broker.protocol属性是错误的,只设置一个。
inter.broker.listener.name=INSIDE
#log.retention.minutes=5
log.retention.hours=168
zookeeper.connect=127.0.0.1:8181,127.0.0.1:8182,127.0.0.1:8183/kafka
compression.type=producer
delete.topic.enable=true
log.dirs=/home/hadoop/kafka/data/1
log.dir=/home/hadoop/kafka/data/1
num.partitions=1
min.insync.replicas=1
default.replication.factor=3
auto.create.topics.enable=false
log.retention.check.interval.ms=300000
log.segment.bytes=1073741824
server2.properties
#每台机器必须唯一
broker.id=1
#在配置集群的时候必须设置,不然以后的操作会报找不到leader的错误
listeners=INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:8092
# INSIDE指的是broker之间通讯,例如:REPLICATION 与LEADER的通讯,OUTSIDE指的是外部客户端与kafka集群之间的通讯,例如:CLIENT与kafka集群
advertised.listeners=INSIDE://127.0.0.1:9092,OUTSIDE://hostname:8092
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
#broker间通讯的监听器名称。如果未设置,则侦听器名称由security.inter.broker.protocol定义。 同时设置此项和security.inter.broker.protocol属性是错误的,只设置一个。
inter.broker.listener.name=INSIDE
#log.retention.minutes=5
log.retention.hours=168
zookeeper.connect=127.0.0.1:8181,127.0.0.1:8182,127.0.0.1:8183/kafka
compression.type=producer
delete.topic.enable=true
log.dirs=/home/hadoop/kafka/data/2
log.dir=/home/hadoop/kafka/data/2
num.partitions=1
min.insync.replicas=1
auto.create.topics.enable=false
log.retention.check.interval.ms=300000
log.segment.bytes=1073741824
server3.properties
#每台机器必须唯一
broker.id=2
#在配置集群的时候必须设置,不然以后的操作会报找不到leader的错误
listeners=INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:8093
# INSIDE指的是broker之间通讯,例如:REPLICATION 与LEADER的通讯,OUTSIDE指的是外部客户端与kafka集群之间的通讯,例如:CLIENT与kafka集群
advertised.listeners=INSIDE://127.0.0.1:9093,OUTSIDE://hostname:8093
listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
#broker间通讯的监听器名称。如果未设置,则侦听器名称由security.inter.broker.protocol定义。 同时设置此项和security.inter.broker.protocol属性是错误的,只设置一个。
inter.broker.listener.name=INSIDE
#log.retention.minutes=5
log.retention.hours=168
zookeeper.connect=127.0.0.1:8181,127.0.0.1:8182,127.0.0.1:8183/kafka
compression.type=producer
delete.topic.enable=true
log.dirs=/home/hadoop/kafka/data/3
log.dir=/home/hadoop/kafka/data/3
num.partitions=1
min.insync.replicas=1
auto.create.topics.enable=false
log.retention.check.interval.ms=300000
log.segment.bytes=1073741824
启动:
kafka-server-start.sh -daemon $KAFKA_HOME/config/server1.properties
kafka-server-start.sh -daemon $KAFKA_HOME/config/server2.properties
kafka-server-start.sh -daemon $KAFKA_HOME/config/server3.properties
beats
filebeat
filebeat版本:filebeat-6.8.4-linux-x86_64.tar.gz filebeat配置: 本例是从本地目录采集文件到kafka filebeat.yml 需要配置的地方如下:
#=========================== Filebeat prospectors =============================
filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- type: log
# Change to true to enable this prospector configuration.
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /home/hadoop/fklek/filebeat/data_log/log.*
#-------------------------Kafka output ------------------------------
output.kafka:
hosts: ["127.0.0.1:8091","127.0.0.1:8092","127.0.0.1:8093"]
#topic: '%{[fields.my_log_topic]}'
topic: test.3
partition.round_robin:
reachable_only: false
#version: 0.10.0.0
required_acks: -1
compression: gzip
max_message_bytes: 1000000
filebeat 配置验证
./filebeat test config -c filebeat.yml
filebeat 启动
./filebeat -e -c filebeat.yml
metricbeat 配置
metribeat版本:metricbeat-6.8.4-linux-x86_64.tar.gz
metricbeat 配置kibana仪表盘监控系统资源情况等(不需要的话,此项可以不配置)
metricbeat.yml 需要配置的地方
#============================== Kibana =====================================
# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.
setup.kibana:
# Kibana Host
# Scheme and port can be left out and will be set to the default (http and 5601)
# In case you specify and additional path, the scheme is required: http://localhost:5601/path
# IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
host: "127.0.0.1:8560"
# Kibana Space ID
# ID of the Kibana Space into which the dashboards should be loaded. By default,
# the Default Space will be used.
#space.id:
#================================ Outputs =====================================
# Configure what output to use when sending the data collected by the beat.
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:8920"]
# Protocol - either `http` (default) or `https`.
#protocol: "https"
# Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"
查看现有的Modules
./metricbeat modules list
执行命令启动Metricbeat
nohup ./metricbeat -e > metricbeat.log & #后台启动
参考:
metricbeat,filebeat仪表盘的安装以及在Kibana上的展示
ELK日志处理之metricbeat服务器性能监控
elasticsearch
elasticsearch版本:
elasticsearch-6.8.4.tar.gz(本例使用此版本,因为需要在有type的类型下做测试)
elasticsearch-7.x以上无type
elasticsearch.yml 需要配置的地方:
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
cluster.name: my-application
node.name: node-1
path.data: /home/hadoop/fklek/es/data
path.logs: /home/hadoop/fklek/es/logs
#修改绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问
network.host: 0.0.0.0
http.port: 8920
#表示这个节点是否可以充当主节点,以及点是否充当数据节点。
node.master: true
node.data: true
#指定IK为分词工具,新版本不需要设置,设置会报错
#index.analysis.analyzer.ik.type : "ik"
#指定集群中的节点中有几个有master资格的节点。对于大集群可以写3个以上。
#covery.zen.minimum_master_nodes: 2
#默认是3s,这是设置集群中自动发现其它节点时ping连接超时时间,为避免因为网络差而导致启动报错,我设成了40s。
#discovery.zen.ping.timeout: 40s
#设置是否打开多播发现节点。
#discovery.zen.ping.multicast.enabled: false
#设置绑定的ip地址,这是我的master的IP。
#network.bind_host: 127.0.0.1
#设置其他节点和该节点交互的IP地址
#network.publish_host: 127.0.0.1
#同时设置bind_host和publish_host上面两个参数
#network.host: 127.0.0.1
#指明集群中其他可能为master的节点ip,以防es启动后发现不了集群中的其他节点。第一对引号里是node1,默认端口是9300.第二个是node2,端口号是9301。第三个引号里是node3,端口号为9302
#discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9301","127.0.0.1:9302"]
#discovery.zen.ping.unicast.hosts:["节点1的 ip","节点2 的ip","节点3的ip"]
#集群结点之间通信端口,默认为9300
#transport.tcp.port: 9300
es启动
./bin/elasticsearch -d -p pid
启动集群
./elasticsearch --cluster.name myes --node.name node1
logstash
logstash版本:logstash-6.8.4.tar.gz
参考:
logstash.yml 需要的配置
path.data: /home/hadoop/fklek/logstash/data #数据存储路径
#path.config: /etc/logstash/conf.d/*.conf #配置文件目录
path.logs: /home/hadoop/fklek/logstash/logs #日志输出路径
kafka_es.conf 配置
input {
kafka {
bootstrap_servers => "127.0.0.1:8091,127.0.0.1:8092,127.0.0.1:8093"
topics => ["test.3"]
auto_offset_reset => "earliest"
group_id => "logstash_group_1"
codec => "plain"
consumer_threads => 1
decorate_events => true
}
}
filter {
}
output {
elasticsearch {
hosts => ["127.0.0.1:8920"]
index => "kafka-es-%{+YYYY.MM.dd}"
workers => 1
}
stdout {codec => rubydebug}
}
logstash启动
nohup ./bin/logstash -l logs/log -f kafka_es.conf > logs/log.nohup 2>&1 &
kibana
kibana版本:kibana-6.8.4-linux-x86_64.tar.gz
kibana.yml 需要的配置
server.port: 8560
server.host: "0.0.0.0"
pid.file: /home/hadoop/fklek/kibana/kibana.pid
elasticsearch.hosts: ["http://localhost:8920"]
kibana.index: ".kibana"
启动kibana
nohup ./bin/kibana -l logs/log > logs/log.nohup 2>&1 &