最近两周,需要部署一套elk日志收集系统,顺便将其整理成部署文档
elk + kafka + zookeeper生产实践
1.查看系统版本
2.确认基础环境
3.安装zookeeper
4.安装kafka
5.安装filebeat
6.安装Elasticsearch
7.安装kibana
8.安装Logstash
9.关联配置
10.最终验证
1.查看系统版本
cat /etc/redhat-release #查看系统版本 CentOS Linux release 7.2.1511 (Core)
2.确认基础环境
update-alternatives --config java #查看java环境 1.8 openjdk +
go version #go version go1.11 linux/amd64
go env #gopath,goroot,gotooldir等确认下没问题
#创建elk用户(用于启动Elasticsearch,修改Elasticsearch的配置)
1.建用户:
adduser elk //新建elk用户
passwd elk //给elk用户设置密码
密码:password
2.创建工作组
创建用户时自动创建了
3.验证用户和组是否创建成功
cat /etc/group
cat /etc/passwd
4.授予elk用户sudo权限
root用户下:sudo vim /etc/sudoers
在 root ALL=(ALL) ALL
下新增记录 elk ALL=(ALL:ALL) NOPASSWD:ALL
#安装的elk+filebeat都是6.4官方推荐稳定版本
#安装的kafka : 2.11-1.1.1 , zookeeper : 3.4.12
#wget,yum,本地download下上传服务器,都可以,官网版本确定,对应系统确定即可
#这里采用的全部是下载压缩包安装方式:
3.安装zookeeper
#将zookeeper压缩包复制到zookeeper安装目录下,定为{zookeeper_home}
#默认安装三台zookeeper服务器集群
tar -xzf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12
#修改配置文件
vim conf/zoo_sample.cfg
dataDir=/var/zookeeper #修改
#添加:
server.1=192.168.23.159:2888:3888
server.2=192.168.23.160:2888:3888
server.3=192.168.23.16:2888:3888
#root下新建目录:
mkdir /var/zookeeper
#启动zookeeper
#复制zoo.cfg文件
cp conf/zoo_sample.cfg conf/zoo.cfg
bin/zkServer.sh start
ps -ef |grep zookeeper #查看启动参数
4.安装kafka
#官网下载,filebeat目前版本限制kafka版本必须在0.8.2.0 and 1.1.1 之间
#直接使用 Kafka 2.11-1.1.1 进行安装
#因为至少需要3台主机,因此,部署在159,160,161三台机器上,目录 /home/sre/deploy/elk
#添加本地hostname的配置
listeners = PLAINTEXT://localhost:9092
#启动kafka server
bin/kafka-server-start.sh config/server.properties &
#查看端口占用情况
netstat -tunlp|egrep "(8888|9092|9093|9094|2181)"
#创建kafka的topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic topic_name
#kafka至少要3个活动的server才能创建topic,但查看topic没有这个限制
#查看topic
bin/kafka-topics.sh --list --zookeeper 192.168.23.159:2181
#查看topic详情
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic_name
#删除topic
bin/kafka-topics.sh --delete --zookeeper 192.168.23.159:2181 --topic topic_name
#kafka对应topic生产数据
bin/kafka-console-producer.sh --broker-list 192.168.23.159:9092 --topic test
#向kafka对应topic申请,消费数据(默认从上次结束的地方开始消费)
5.安装filebeat
#下载安装包(centos的对应filebeat_file.rpm)并安装
rpm -iv filebeat_file.rpm
#rpm安装的filebeat程序根目录
/usr/share/filebeat
#修改配置文件
sudo vim /etc/filebeat/filebeat.yml
#配置多个input,区分不同来源的日志,并设置不同的fields_topic(对应不同kafka的topic),之后统一通过kafka out分别输出到对应的kafka topic 中去
#启用指定模板
sudo filebeat modules enable elasticsearch kafka kibana system nginx mysql
#查看模板启用情况
sudo filebeat modules list
#将filebeat.reference.yml中关于kafka output相关的配置复制到filebeat.yml文件中output的部分,即可通过service启动
systemctl status filebeat
systemctl start filebeat
systemctl restart filebeat
systemctl stop filebeat
6.安装Elasticsearch
#elasticsearch全部操作均以elk用户登录
cd /usr/local
#权限授予(elk用户目录进入权限)
chown -R elk.elk /home/
chown -R elk.root /home/sre/deploy/go/src/
shasum -a 512 -c elasticsearch-oss-6.4.2.tar.gz.sha512 #根据.sha512校验文件是否没问题
tar -xzf elasticsearch-oss-6.4.2.tar.gz
#给elk用户/组赋予elasticsearch-oss-6.4.2目录的权限
sudo chown -R elk:elk elasticsearch-oss-6.4.2
cd elasticsearch-oss-6.4.2/
#修改配置文件(结合2.x.生产上线前的配置中的sudo vim ./config/elasticsearch.yml部分修改)
sudo vim ./config/elasticsearch.yml
#找到 network.host: 的一行数据,修改为: network.host: hostIp
#去掉 http.port 前面的注释,如果需要修改端口,也需要将端口号修改为需要的值
#设置集群名:cluster.name: sre-elasticsearch
#设置节点名:master-node-{$node-number}
#设置初始节点发现接入的host列表:discovery.zen.ping.unicast.hosts: ["192.168.23.159", "192.168.23.160" ,"192.168.23.16"]
#设置mater最小节点:discovery.zen.minimum_master_nodes: 2
#以上报错修改配置(el的host是localhost时不会报错)
sudo vim /etc/sysctl.conf
vm.max_map_count=655360
sudo sysctl -p #修改内核后立即刷新
sudo vim /etc/security/limits.conf
#添加下面四个
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
ulimit -a #查看配置参数
#root用户下执行 ulimit -n 65536
#切换到elk用户,会话级设置: su - elk ##之后新建的elk 会话也使用了新的设置
ulimit -a #查看配置参数
#启动Elasticsearch
./bin/elasticsearch -d -p pid
#验证Elasticsearch是否正常运行
curl 'localhost:9200/' #看到返回json数据即表示正常运行了 curl '192.168.23.159:9200/'
#查看Elasticsearch集群(cluster)状态的api
curl -XGET 'http://192.168.23.159:9200/_cluster/health'
7.安装kibana
#官网目前一个kibana只能指向一个具体的Elasticsearch,对Elasticsearch集群,官方建议kibana指向专门的协调节点(coordinating-node)
tar -xzf kibana-oss-6.4.2-linux-x86_64.tar.gz
#给elk用户/kibana-6.4.2-linux-x86_64目录的权限
sudo chown -R elk:elk kibana-6.4.2-linux-x86_64
cd kibana-6.4.2-linux-x86_64/
#修改配置文件
sudo vim ./config/kibana.yml
#修改server.host成122.11.47.183以使其他机器可以访问kibana,默认端口5601(可通过server.port配置)
#找到server.host: "localhost" ,取消掉注释,改为所在ip(方便外网访问)
#修改Elasticsearch.url 到 '122.11.47.183:9200' '192.168.23.159:5601'
#
sudo mkdir /var/log/kibana
#给elk用户/kibana-6.4.2-linux-x86_64目录的权限
sudo chown -R elk:elk /var/log/kibana
#事实上并未在目录记录日志############################################
#启动kibana
./bin/kibana
#测试是否成功启动,返回成功的json即表示成功启动kibana
curl 'localhost:5601/' curl '192.168.23.159:5601/'
8.安装Logstash
#同上
#测试是否成功
./bin/logstash -e 'input { stdin {} } output { stdout {} }'
#成功启动后,在命令行输入,自动识别输入,返回json的output
#添加配置文件,指定启动的配置文件
./bin/logstash -f $file_path/config_file
#配置内容:
output {
elasticsearch { hosts => ["122.11.47.183:9200"] }
stdout { codec => rubydebug }
}
#logstash可以配置到Elasticsearch的集群的output,方法是给一个 host:port的数组
9.关联配置
1.filebeat 在一个终端只安装一个,可以区分不同路径和不同文件夹下的文件,并将其自动推送到kafka的对应topic中去,一个filebeat可以负载均衡地对应一个kafka集群
2.logstash 可以从一个kafka集群的多个指定topic中获取(消费)数据,并将其在记录的根级以type的key-value对将其区分索引开来
3.elasticsearch可以是一个分布式存储,索引的数据库集群,接收多个来源的数据
4.kibana只接受elasticsearch中一个固定主机的数据,以此作为web前段展现,查询,配置维护的入口
5.总结:多个filebeat到fafka集群,单个 logstash 从kafka获取数据,输入到elasticsearch集群,kibana从elasticsearch中固定的一个主机进入/查询/维护数据)
10.最终验证
在filebeat配置的log文件中输入数据,看对应topic是否数据进入kafka,logstash是否成功从kafka获取到数据,kibana上是否可以看到