一次企业级日志中心ELK搭建

企业级日志中心ELK部署清单
一、版本说明
Jdk1.8、Elasticsearch6.5.4、Logstash6.5.4、Kibana6.5.4、kafka2.11.1、Filebeat6.5.4
相应的版本最好下载对应插件
二、搭建架构

相关地址:
官网地址:https://www.elastic.co
官网搭建:https://www.elastic.co/guide/index.html
三、实施部署
下载并上传软件包到对应机器上
1、Elasticsearch集群部署
系统类型:Centos7.5
节点IP:192.168.1.190、192.168.1.191、192.168.1.192
软件版本:jdk1.8u211-linux-x64.tar.gz、elasticsearch-6.5.4.tar.gz
1.1安装配置jdk1.8
ES运行依赖jdk8

tar zxvf /usr/local/src/jdk1.8u211-linux-x64.tar.gz -C /usr/local/

mv /usr/local/jdk1.8.0_211 /usr/local/java

echo ‘

JAVA_HOME=/usr/local/java
PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export JAVA_HOME PATH
‘ >>/etc/profile.d/java.sh

source /etc/profile.d/java.sh

#java -version
1.2机器配置
查看服务器ip

cat /etc/sysconfig/network-scripts/ifcfg-ens33

关闭防火墙

systemctl status firewalld

添加主机名iP映射

vim /etc/hosts

n6
192.168.1.190 master
192.168.1.191 node1 
192.168.1.192 node2
192.168.1.193 node3
1.3安装配置ES
(1)创建运行ES的普通用户

useradd ela

echo “12345” | passwd --stdin ela

(2)安装配置ES

tar zxvf /usr/local/src/elasticsearch-6.5.4.tar.gz -C /usr/local/

#echo ‘
cluster.name: qf01-elk
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: [“192.168.1.191”,“192.168.1.192”]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: “*”
’ >>/usr/local/elasticsearch-6.5.4/config/elasticsearch.yml
配置项含义

cluster.name 集群名称,各节点配成相同的集群名称。

node.name 节点名称,各节点配置不同。

node.master 指示某节点是否符合成为主节点的条件

node.data 指示节点是否为数据节点,数据节点包含并管理索引的一部份

path.data 数据存储目录

path.logs 日志目录

bootstrap.memory_lock 内存锁定,是否禁用交换

bootstrap.system_call_filter 系统调用过滤器

network host 绑定节点ip

http.port rest api端口

discovery.zen.ping.unicast.hosts 提供其他Elasticsearch服务节点的单点广播发现功能。

discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。

discovery.zen.ping_timeout 节点在发现过程中的等待时间。

discovery.zen.fd.ping_retries 节点发现重试次数。

client.transport.ping_timeout: 60s ping命令的响应时间默认为5s

#http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES
#http.cors.allow.origin 允许的源地址

(3) 设置JVM堆大小

sed -i ‘s/- Xms1g/-Xms2g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options

sed -i ‘s/- Xmx1g/-Xmx2g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options

注意:
1.确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。
2.如果系统内存足够大,将堆内存最大值和最小值设置为31G,因为有一个32G性能瓶颈问题。
3.堆内存大小不要超过系统内存的50%

(4) 创建ES数据及日志存储目录

mkdir -pv /data/elasticsearch/data

mkdir -pv /data/elasticsearch/logs

(5) 修改安装目录及存储目录权限
#chown -R ela:ela /data/elasticsearch
#chown -R ela:ela /usr/local/elasticsearch-6.5.4
1.4系统优化
(1)增加最大文件打开数
永久生效方法:

echo “* - nofile 65536”>> /etc/security/limits.conf

(2)增加最大进程数

echo “* soft nproc 31717”>> /etc/security/limits.conf

更多的参数调整可以直接用这个

  • soft nofile 65536
  • hard nofile 131072
  • soft nproc 2048
  • hard nproc 4096

(3)增加最大内存映射数

echo “vm.max_map_count=262144”>> /etc/sysctl.conf

sysctl -p

(4)启动如果报下列错误
memory locking requested for elasticsearch process but memory is not locked

修改elasticsearch.yml文件
bootstrap.memory_lock : false

vim /etc/sysctl.conf文件

vm.swappiness=0

错误:
max file descriptors [4096] for elasticsearch process is too low, increase to at least[65536]
意思是elasticsearch 用户拥有的客串建文件描述的权限太低,知道需要65536个
解决:
切换到root用户下面,

vim /etc/security/limits.conf

在最后添加

  • hard nofile 65536
  • hard nofile 65536
    重新启动elasticsearch ,还是无效?
    必须重新登录启动elasticsearch的账户才可以,例如我的账户名是elasticsearch,退出重新登录。另外也可以切换启动elasticsearch的账户也可以, 代表所有,其实比较不合适

启动还会遇到另外问题,就是
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
意思是:elasticsearch用户拥有的内存权限太小了,至少需要262144,这个比较简单,也不需要重启,直接sysctl -w vm.max_map_count=262144执行就可以了
1.5启动ES

su - ela -c “cd /usr/local/elasticsearch-6.5.4 && nohup bin/elasticsearch &”

测试:浏览器访问http://192.168.1.190:9200
1.6安装配置head监控插件
(1)安装node

wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz

#tar -zxf node-v4.4.7-linux-x64.tar.gz -C/usr/local

echo ‘

NODE_HOME=/usr/local/node-v4.4.7-linux-x64.tar.gz
PATH= N O D E H O M E / b i n : NODE_HOME/bin: NODEHOME/bin:PATH
export NODE_HOME PATH
‘ >>/etc/profile.d/node.sh
#source /etc/profile

node --version #检查node版本号

(2)下载head插件

wget https://github.com/mobz/elasticsearch-head/archive/master.zip

unzip -d /usr/local master.zip

(3)安装grunt

cd /usr/local/elasticsearch-head-master/

npm install -g grunt-cli

grunt --version #检查grunt版本号

grunt-cli v1.3.2
(4)修改head源码

vi /usr/local/elasticsearch-head-master/Gruntfile.js (95行左右)

vi /usr/local/elasticsearch-head-master/_site/app.js (4374行左右)

原本是http://localhost:9200,如果head和ES不在同一台机器上,注意修改成ES的IP地址,
如果在同一台机器,可以不修改
(5)下载head必要的文件
#wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2

mkdir /tmp/phantomjs/

#cp /usr/local/src/phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/
(6)运行head

cd /usr/local/elasticsearch-head-master/

#npm install --registry=https://registry.npm.taobao.org #添加淘宝镜像
#nohup grunt server &
(7)测试
访问:http://192.168.1.190:9100

注意
1.Master与Data节点分离,当Data节点大于3个的时候,建议责任分离,减轻压力
2.Data Node内存不超过32G,建议设置成32G,具体原因可以看上一篇文章
3.Discovery.zen.minimum_master_node设置成(total/2+1),避免脑裂情况
4.最重要的一点,不要将ES暴露在公网中,建议都安装X-PACK,来加强其安全性
2、Kibana部署
系统类型:Centos7.5
节点IP:192.168.1.190
软件版本:nginx-1.14.2、kibana-6.5.4-linux-x86_64.tar.gz
2.1安装配置kibana
(1)安装

tar zxf kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/

(2)配置

echo ‘

server.port: 5601
server.host: “192.168.1.190”
elasticsearch.url: “http://192.168.1.190:9200”
kibana.index: “.kibana”
‘>>/usr/local/kibana-6.5.4-linux-x86_64/config/kibana,yml
配置项含义:
server.port kibana服务器端口,默认5601
server.host kibana主机IP地址,默认localhost
elasticsearch.url 用来做查询的ES节点的URL,默认http://localhost:9200
kibana.index kibana在elasticsearch中使用索引来存储保存的searches,visualizations和dashboards,默认 .kibana
其他配置项可参考:
https://www.elastic.co/guide/en/kibana/6.5/settings.html
(3)启动
#cd /usr/local/kibana-6.5.4-linux-x86_64/
#nohup ./bin/kibana &
2.2安装配置Nginx反向代理
3、Kafka集群部署
系统类型:Centos7.5
节点IP:192.168.1.190、192.168.1.191、192.168.1.192
软件版本:jdk1.8u211-linux-x64.tar.gz、kafka_2.11-2.0.0.tgz
示例节点:192.168.1.190
3.1安装配置jdk8
3.2安装配置zk
kafka运行依赖ZK,kafka官网提供的tar包中,已经包含了ZK,这里不再下载ZK。
(1)安装

tar xzvf /usr/local/src/kafka_2.11-2.0.0.tgz -C /usr/local

(2)配置

sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.0.0/config/zookeeper.properties

#echo ‘
dataDir=/opt/data/zookeeper/data
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=20
syncLimit=10
server.1=192.168.1.190:2888:3888 //kafka集群IP:port
server.2=192.168.1.191:2888:3888
server.3=192.168.1.192:2888:3888
‘>>/usr/local/kafka_2.11-2.0.0/config/zookeeper.properties
配置项含义
dataDir ZK数据存放目录。
dataLogDir ZK日志存放目录
clientPort 客户端连接ZK服务的端口
tickTime ZK服务器之间或客户端与服务器之间维持心跳的时间间隔
initLimit 允许follwer(相对于Leader 而言的)连接并同步到Leader 的初始化连接时间,以ticTime为单位,当初始化连接时间超过改值,则表示连接失败。

syncLimit Leader与follwer之间发送消息时,请求和应达时间长度,如果follwer在设置时间内不能与Leader通信,那么此follwer将被丢弃。
server.1=192.168.1.190:2888:3888 2888 是follwer与Leader交换信息的端口,3888是当leader挂了时用来执行选举时服务器相互通信的端口
创建data、log目录

mkdir -p /opt/data/zookeeper/{data,logs}

创建myid文件
#echo 1> /opt/data/zookeeper/data/myid #每台kafka机器都要做成唯一的ID
3.3配置kafka
(1)配置

sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.0.0/config/server.properties

#echo ‘
broker.id=1
listeners=PLAINTEXT://192.168.1.190: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=/opt/data/kafka/logs
num.partitions=6
num.receive.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.190:2181,192.168.1.191:2181,192.168.1.192:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
‘ >>/usr/local/kafka_2.11-2.0.0/config/server.properties
配置项含义

创建log目录

mkdir -p /opt/data/kafka/logs

3.4其他节点配置
只需把配置好的安装包直接分发到其他节点,然后修改ZK的myid,Kafka的broker.id和listeners就可以了。
3.5启动、验证ZK集群
(1)启动 zk
在三个节点依次执行:

cd /usr/local/kafka_2.11-2.0.0/

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

(2)验证zk
查看zk配置

echo conf | nc 127.0.0.1:2181

(3)查看zk状态

echo stat | nc 127.0.0.1:2181

(4)查看zk端口

lsof -i:2181

3.6启动、验证Kafka
(1)启动
在三个节点上依次执行:

cd /usr/local/kafka_2.11-2.0.0/

nohup bin/kafka-server-start.sh config/server.properties &

(2)验证
在192.168.1.190上创建topic

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic

(3)查询192.168.1.190的topic

bin/kafka-topics.sh --zookeeper 192.168.1.190:2181 --list

(4)查询192.168.1.191的topic

bin/kafka-topics.sh --zookeeper 192.168.1.191:2181 --list

(5)查询192.168.1.192的topic

bin/kafka-topics.sh --zookeeper 192.168.1.192:2181 --list

(6)模拟消息生产和消费
发送消息到192.168.1.190

bin/kafka-console-producer.sh --broker-list 192.168.1.190:9092 --topic testtopic

从192.168.1.191接受消息

bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.191:9092 --topic testtopic --from-beginning

3.7监控 kafka Manager
注:需添加部署部分
Kafka-manager 是Yahoo 公司开源的集群管理工具
可以在Github 上下载安装:https://github.com/yahoo/kafka-manager

4、Logstash部署
系统类型:Centos7.5
节点IP:192.168.1.190
软件版本:jdk1.8u211-linux-x64.tar.gz、logstash-6.5.4.tar.gz

3.1安装配置jdk8

3.2 logstash安装配置
(1)安装

tar xzvf /usr/local/src/logstash-6.5.4.tar.gz -C /usr/local/

(2)配置
创建目录,我们将所有的input、filter、output配置文件全部放到该目录中。

mkdir -p /usr/local/logstash-6.5.4/etc/conf.d

vim /usr/local/logstash-6.5.4/etc/conf.d/input.conf

input{
kafka {
type=> “nginx_kafka”
codec => “json”
tipics => “nginx”
decorate_events => true
bootstrap_servers => “10.221.164.121:9092,10.221.164.120:9092,10.221.164.116:9092”
}
}

vim /usr/local/logstash-6.5.4/etc/conf.d/output.conf

output{
if[type]==”nginx_kafka” {
elasticsearch {
hosts => [“10.221.164.121”,”10.221.164.120”,”10.221.164.116”]
index => ‘logstash-nginx-%{+YYYY-MM-dd}’
}
}
}

(3)启动

cd /usr/local/logstash-6.5.4

nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &

5、Filebeat部署
为什么用filebeat,而不用原来的Logstash呢?原因很简单,资源消耗比较大。
由于Logstash是java开发的,要跑在jvm上,资源消耗比较大,后来作者用Go写了一个功能较少但是资源消耗也小的轻量级的Agent叫logstash-forwarder.
后来作者加入elastic.co公司,logstash-forwarder的开发工作给公司内部Go团队来搞,最后命名为filebeat.
filebeat需要部署在每台应用服务器上,可以通过Ansible来推送并安装配置
(1)安装

tar xzvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local/

mv filebeat-6.5.4-linux-x86_64 filebeat

cd filebeat/

(2)修改配置
修改filebeat 配置,支持收集本地目录日志,并输出日志到kafka集群中
#cd /usr/local/filebeat/

vim fileat.yml

filebeat.prospectors:

  • type: log
    paths:
  • /opt/logs/server/nginx.log
    json.keys_under_root: true
    json.add_error_key: true
    json.message_key: log

output.kafka:
hosts: [“10.221.164.121:9092”,”10.221.164.120:9092”,”10.221.164.116:9092”]
topic: ‘nginx’
启动nohup ./filebeat -e -c filebeat.yml > filebeat.log &
注意:非root用户启动 exit关闭窗口,要不然进程会被杀掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值