Elasticsearch+Logstash+Kibana+Kafka+Filebeat分布式日志处理系统部署

Elasticsearch+Logstash+Kibana+Kafka+Filebeat分布式日志处理系统部署,第1张

Elasticsearch+Logstash+Kibana+Kafka+Filebeat分布式日志处理系统部署 1、部署前的准备工作 1.1、设置固定ip因为部署集群会在配置文件配置ip
#查看是否为固定ip
cat /etc/sysconfig/network-scripts/ifcfg-ens33
#如果不是自己去网上查设置固定ip方法
1.2、关闭防火墙
#查看防火墙状态,以下两种方式,任选其一
systemctl status firewalld
service  iptables status
#暂时关闭防火墙,以下两种方式,任选其一
systemctl stop firewalld
service  iptables stop
#永久关闭防火墙,以下两种方式,任选其一
systemctl disable firewalld
chkconfig iptables off
#重启防火墙,以下两种方式,任选其一
systemctl enable firewalld
service iptables restart
1.3、关闭SELinux
#查询SELinux状态
getenforce
#设置SELinux 成为permissive模式,或enforcing模式,临时关闭(无需重启)
setenforce 0  或   setenforce 1             
#永久关闭(需要重启)
修改/etc/selinux/config 文件
将 SELINUX=enforcing 改为 SELINUX=disabled
1.4、查看防火墙策略
iptables -nL
1.5、清理源和下载源
rm -rf /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

yum clean all

yum -y install wget

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、安装java环境 2.1、设置java环境变量
echo '
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
' >>/etc/profile.d/java.sh
3、ElasticSearch部署 3.1、创建运行ES的普通用户,因为ES不能以root用户运行
useradd ela
echo "密码" | passwd --stdin ela
3.2、安装ES
#解压es安装包
tar zxvf /usr/local/src/elasticsearch-6.8.3.tar.gz -C /usr/local/
3.3、配置ES
echo '
#集群名称,个节点配置相同集群名称
cluster.name: leyou-elk
#节点名称,各节点配置不同
node.name: elk01
#表示该节点为主节点  Mater与data节点分离,当data节点大于三个的时候,建议责任分离
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
#绑定节点ip
network.host: 0.0.0.0
#rest api端口
http.port: 9200
#提供其他es服务节点的单点广播发现功能
#discovery.zen.ping.unicast.hosts: ["192.168.1.191", "192.168.1.192"]
#集群中可工作的具有master节点资格的最小数量,官方推荐(N/2)+1,其中N是具有master资格的节点的数量
#discovery.zen.minimum_master_nodes: 2
#节点在发现过程中的等待时间
#discovery.zen.ping_timeout: 150s
#节点发现重试次数
#discovery.zen.fd.ping_retries: 10
#client.transport.ping_timeout: 60s
#是否允许跨源REST请求,用于允许head插件访问es
http.cors.enabled: true
#允许的源地址
http.cors.allow-origin: "*"
#xpack 插件的授权类型,basic是免费的,还有其他收费版本
xpack.license.self_generated.type: basic
#是否开启安全验证
xpack.security.enabled: true
#是否开启远程访问安全验证
xpack.security.transport.ssl.enabled: true
http.cors.allow-headers: Authorization,Content-Type
' >>/usr/local/elasticsearch-6.8.3/config/elasticsearch.yml
3.4、设置JVM堆大小
sed -i 's/-Xms2g/-Xms1g/' /usr/local/elasticsearch-6.8.3/config/jvm.options
sed -i 's/-Xmx2g/-Xmx1g/' /usr/local/elasticsearch-6.8.3/config/jvm.options

注意:

1.确保堆内存的最大值与最小值得大小相同,防止程序在运行时改变堆内存大小。

2.如果系统内存足够大,将堆内存最大值和最小是设置为31g,因为有一个32g的性能瓶颈问题。

3.堆内存大小不要超过系统内存的50%

3.5、创建es数据及日志存储目录
mkdir -pv /data/elasticsearch/data
mkdir -pv /data/elasticsearch/logs
3.6、修改安装目录及存储目录权限
chown -R ela:ela /data/elasticsearch
chown -R ela:ela /usr/local/elasticsearch-6.8.3
3.7、系统优化

3.7.1、增加最大文件打开数

永久生效方法:

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

3.7.2、增加最大进程数

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

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

3.7.3、最大内存映射数

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

3.7.4、启动如果报下列错误

memory locking requested for elasticsearch process but memory is not locked

elasticsearch.yml
bootstrap.memory_lock: false

/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
* soft nofile 65536
重新启动elasticsearch,还是无效?
必须重新登录启动elasticsearch的账户才可以,例如我的账户名是elasticsearch,退出重新登录
另外*也可以换为启动elasticsearch的账户也可以, *代表所有,其实比较不合适

其实还会遇到另外一个问题,就是
max virtual memory areas areas vm.max_map_count [65530] is too low, increase to at least [262144]
意思是:elasticsearch用户拥有的内存权限太小了,至少需要262114,这个比较简单,也不需要重启,直接执行
sysctl -w vm.max_map_count=262144
3.8、启动ES
su - ela 
cd /usr/local/elasticsearch-6.8.3
nohup bin/elasticsearch &

#设置密码
./bin/elasticsearch-setup-passwords interactive
3.9、安装配置head监控插件

3.9.1、安装node

wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz

tar zxvf node-v10.14.1-linux-x64.tar.gz -C /usr/local/

echo '
NODE_HOME=/usr/local/node-v10.14.1-linux-x64
PATH=$NODE_HOME/bin:$PATH
export NODE_HOME PATH
' >> /etc/profile.d/node.sh

source /etc/profile.d/node.sh

node --version

3.9.2、下载head插件

wget http://github.com/mobz/elasticsearch-head/archive/master.zip
unzip -d /usr/local/ master.zip

3.9.3、安装grunt

cd /usr/local/elasticsearch-head-master
npm install -g grunt-cli
grunt --version

3.9.4、修改head源代码

vi /usr/local/elasticsearch-head-master/Gruntfile.js  #95行左右
connect: {
                        server: {
                                options: {
                                        port: 9100,
                                        base: '.',
                                        keepalive: true,
                                        houstname: '*'
                                }
                        }
                }
vi /usr/local/elasticsearch-head-master/_site/app.js  #4374行左右
app.App = ui.AbstractWidget.extend({
                defaults: {
                        base_uri: null
                },
                init: function(parent) {
                        this._super();
                        this.prefs = services.Preferences.instance();
                        this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://head和es不在同一节点修改为es的ip地址:9200";

3.9.5、下载head必要的文件

wget http://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
mkdir /tmp/phantomjs/
cp phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/

3.9.6、运行head

cd /usr/local/elasticsearch-head-master/
npm install --registry=https://registry.npm.taobao.org
nohup grunt server &
#es加密码后插件访问格式
http://node1:9100/?auth_user=elastic&auth_password=changeme
4、kibana部署 4.1、安装配置kibana
tar zxvf kibana-6.8.3-linux-x86_64.tar.gz -C /usr/local/

echo '
#服务端口
server.port: 5601
#kibana主机ip地址
server.host: "本机ip"
#查询es节点的url
elasticsearch.url: "http://esIp:9200"
#kibana在elasticsearch中使用索引来存储保存的searches,visualizations和dashboards,默认.kibana
kibana.index: ".kibana"
#设置es的账号密码
elasticsearch.username: "kibana"
elasticsearch.password: "密码"
'>>/usr/local/kibana-6.8.3-linux-x86_64/config/kibana.yml
4.2、启动
cd /usr/local/kibana-6.8.3-linux-x86_64
nohup ./bin/kibana &
5、Kafka部署 5.1、安装配置ZK
wget http://archive.apache.org/dist/kafka/2.4.0/kafka_2.11-2.4.0.tgz

tar zxvf kafka_2.11-2.4.0.tgz -C /usr/local/

sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.4.0/config/zookeeper.properties

echo '
#zk数据存放目录
dataDir=/opt/data/zookeeper/data
#zk日志存放目录
dataLogDir=/opt/data/zookeeper/logs
#客户端连接zk服务端口
clientPort=2181
#zk服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000
#允许follower(相对leaderer言的客户端)连接并同步到leader的初始化连接时间,以tickTime为单位,当初始化连接时间超过该值,则表示连接失败
initLimit=20
#leader与follower之间发送消息时,请求和应答时间长度,如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
syncLimit=10
#2888是follower与leader交换信息的端口,3888是当leader挂了时用来执行选举时服务器相互通信的端口
server.1=ip:2888:3888
'>>/usr/local/kafka_2.11-2.4.0/config/zookeeper.properties
5.2、创建data、log目录、myid文件
mkdir -p /opt/data/zookeeper/{data,logs}
#每台kafka机器都要做成唯一id
echo 1 > /opt/data/zookeeper/data/myid
5.3、配置kafka
sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.4.0/config/server.properties

echo '
#每个server需要单独配置,如果不配置系统会自动配置,需要和上一步id保持一致
broker.id=1
#监听地址
listeners=PLAINTEXT://ip:9092
#接收和发送网络信息的线程数
num.network.threads=3
#服务器由于处理请求的线程数,其中肯能包含磁盘I/O
num.io.threads=8
#套接字服务器使用的发送缓冲区SO_SNDBUF
socket.send.buffer.bytes=102400
#套接字服务器使用的接收缓冲区SO_RCVBUF
socket.receive.buffer.bytes=102400
#套接字服务器将接收的请求的最大大小,防止OOM
socket.request.max.bytes=104857600
#日志文件目录
log.dirs=/opt/data/kafka/logs
#partitions数量
num.partitions=6
#启动是恢复日志,关闭是刷盘日志每个数据目录的线程的数量默认1
num.recovery.threads.per.data.dir=1
#片偏移量话题的复制因子,设置更高保证可用,为了保证有效的复制,偏移话题的复制因子是可配置的,在偏移话题的第一次请求的时候可用的broker的数量至少为复制因子的大小,否则要么话题创建失败,要目复制因子取可用broker的数量和配置复制因子的最小值
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
#日志文件删除之前保留的时间,单位小时,默认168
log.retention.hours=168
#单位日志文件的大小默认1073741824
log.segment.bytes=536870912
#检查日志段以查看是否可以根据保留策略删除和他们的时间间隔
log.retention.check.interval.ms=300000
#zk主机地址,如果是机器已逗号隔开
zookeeper.connect=ip:2181
#连接到zk的超时时间
zookeeoer.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
#以下密码配置
#使用的认证协议
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL机制
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
' >> /usr/local/kafka_2.11-2.4.0/config/server.properties


#以下为配置密码
#在config下面新建kafka_client_jaas.conf文件内容如下
KafkaClient {  
org.apache.kafka.common.security.plain.PlainLoginModule required  
    username="kafka"  
    password="admin";  
};

#在config下面新建kafka_server_jaas.conf文件内容如下
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
        username="kafka"
        password="admin"
        user_admin="kafka";
};

#修改启动脚本
vim bin/kafka-server-start.sh
# 最上面加上(路径改为自己的)
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.11-2.4.0/config/kafka_server_jaas.conf"

vim bin/kafka-console-producer.sh , vim bin/kafka-console-consumer.sh

#最上面加上(路径改为自己的)
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/local/kafka_2.11-2.4.0/config/kafka_client_jaas.conf"

#config下consumer.properties和producer.properties添加命令
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
5.4、创建log目录
mkdir -p /opt/data/kafka/logs
5.5、配置其他节点

只需要把配置好的安装包分发到其他节点,然后修改zk的myid,kafka的broker.id和listeners就可以了

5.6、启动验证zk集群
cd /usr/local/kafka_2.11-2.4.0/

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

安装nc
yum -y install nc

echo conf | nc 127.0.0.1 2181
5.7、启动验证kafka
cd /usr/local/kafka_2.11-2.4.0/

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

#验证,创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic

#查询创建的topic
bin/kafka-topics.sh --zookeeper ip:2181 --list



6、logstash部署 6.1、安装配置
tar zxvf logstash-6.8.3.tar.gz -C /usr/local/

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

vi /usr/local/logstash-6.8.3/etc/conf.d/input.conf
input{
kafka{
    type => "leyou"
    codec => "json"
    topics => "leyou_item_log"
    decorate_events => true
    bootstrap_servers => "ip:9092"
   }
}

vi /usr/local/logstash-6.8.3/etc/conf.d/output.conf
output{
   if [type] == "leyou" {
   elasticsearch {
   hosts => ["ip"]
   index => 'leyou_item_log-%{+yyyy-MM-dd}'
     }
   }
}
6.2、启动
cd /usr/local/logstash-6.8.3
nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
7、Filebeat部署 7.1、安装配置
tar zxvf filebeat-6.8.3-linux-x86_64.tar.gz -C /usr/local/

vi filebeat.yml
filebeat.inputs:
- type : log
  enabled: true
  paths:
    - /usr/local/leyou/ly-item/logs/app.log
  encoding: UTF-8
  exclude_files: ['.gz$']
  fields:
    leyou-log-type: leyou-app-log
    leyou-index-per-sys: false
  multiline.pattern: '^-d{4}-d{2}-d{2}'
  multiline.negate: true
  multiline.match: after
  multiline.max_lines: 500
  
output.kafka:
  enabled: true
  hosts: ['ip:9092']
  topic: 'leyou_item_log'
  username: "kafka"
  password: "密码"
  max_retries:3  #最大重试次数
  bulk_max_size: 2048 #在单个 Kafka 请求中批量处理的最大事件数。默认值为 2048。
  timeout: 30s   #超时前等待 Kafka 代理响应的秒数。默认值为 30(秒)。
  broket_timeout: 10s  #代理等待所需 ACK 数量的最长时间。默认为 10 秒。
  channel_buffer_size: 256  #每个 Kafka 代理在输出管道中缓冲的消息数。默认值为 256。
  keep_alive: 60  #活动网络连接的保持活动期。如果为 0,则保持连接被禁用。默认值为 0 秒。
  required_acks: 1  #borker要求的 ACK 可靠性级别。0=无响应,1=等待本地提交,-1=等待所有副本提交。默认值为 1。注意:如果设置为 0,则 Kafka 不会返回任何 ACK。消息可能会在出错时静默丢失。
  compression: gzip  #设置输出压缩编解码器。必须是none,snappy,lz4和gzip其中一个。默认为gzip。
  max_message_bytes: 1000000 #大于max_message_bytes的事件将被丢弃,确保Filebeat发出的事件小于max_message_bytes
  client_id : 'leyou-filebeats'

  
7.2、启动
cd /usr/local/filebeat-6.8.3-linux-x86_64
nohup ./filebeat -e -c filebeat.yml &

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4685721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存