记一次从elk到elfk的升级

最近完成了公司的一次elk升级,东西比较多,在做的过程中做了一些笔记。所有东西来源于网络,现在我也做一次小总结,希望能帮到其他人。找了很多资料,大部分是其他同学写的博客,少部分官方资料。文档中我引用了很多同学的链接,如有侵权还请联系我,将会立即删除,联系邮件:jesus110@163.com
在开始写这篇博客的时候才发现,要写好一篇博客不容易,可能要做几次实验,需要截图,上传图片,重新排版。感谢那些乐于奉献的博主们。

我们之前的elk架构比较简单,也存在一些问题:
1、logstash占用系统资源较大,影响服务器性能
2、logstash在数据量较大的时候容易引起程序崩溃,导致数据缺失。
3、随着时间的积累,es空间不能满足现状
4、kibana没有安全管控机制,数据安全没有保障记一次从elk到elfk的升级

基于以上几个问题,我们对现有系统做了如下改进:
1、客户端选用更轻量化的filebeat,优点是暂用系统资源小,收集效率高。
2、filebeat数据收集之后存放于kafka,然后用logstash来逐条消费,写入es。确保数据的完整性。
3、将原有的3个es节点增加至5个节点,增大存储空间,数据分片存放于不同的节点,更有利于快速检索。
4、引入x-pack,实现index级别的权限管控,确保数据安全。
记一次从elk到elfk的升级

下面是配置的大概步骤:
实际配置中我有5个es节点,实验中只做了3个主要的节点,另外两个数据节点没有做。
节点和功能分配:

节点名ip角色
node110.10.10.51elasticsearch(master/data/ingest)+elasticsearch-head+kafka+logstash
node210.10.10.52elasticsearch(master/data/ingest)+kafka+logstash+kibana
node310.10.10.53elasticsearch(master/data/ingest)+kafka+logstash

一、基础环境搭建
1、虚拟机安装三台机器分别为8核,16G,500G,安装centos 7.4,配置hosts或者dns,让主机名和ip能对应解析,便于后面的设置。
2、安装java 1.8 下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择相应版本下载
二、安装kafka
参考文档:https://www.cnblogs.com/luotianshuai/p/5206662.html
1、安装zookeeper
a、创建目录(生产环境中数据统一放在/data中 应用程序统一放在/usr/local下)
mkdir -p /data/zookeeper/{data,logs}
b、下载zookeeper
官方下载地址:http://zookeeper.apache.org/releases.html#download 选择自己需要的版本下载,我这里选的3.4.12

wget -P /tmp http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
cd /tmp
tar zxf zookeeper-3.4.12.tar.gz
cp -rf zookeeper-3.4.12 /usr/local
ln -s /usr/local/zookeeper-3.4.12  /usr/local/zookeeper

c、配置zookeeper
编辑 /usr/local/zookeeper/conf/zoo.cfg
配置内容如下:(三台服务器配置文件相同)

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

d、创建myd文件

#node1
echo "1" > /data/zookeeper/zkdata/myid
#node2
echo "2" > /data/zookeeper/zkdata/myid
#node3
echo "3" > /data/zookeeper/zkdata/myid

e、启动,并查看zookeeper(三台都需要启动)
启动
/usr/local/zookeeper/bin/zkServer.sh start
查看
/usr/local/zookeeper/bin/zkServer.sh status
通过status可以看到状态
2、安装kafka
a、下载与安装下载地址http://kafka.apache.org/downloads 选择需要的版本下载,我这里用的是kafka_2.11-2.0.0

wget -P /tmp https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz
cd /tmp
tar zxf  kafka_2.11-2.0.0.tgz
cp -rf kafka_2.11-2.0.0 /usr/local/
ln -s /usr/local/kafka_2.11-2.0.0  /usr/local/kafka

b、创建目录
mkdir -p /data/kafka/logs
c、配置文件(三台服务器仅broker.id 不同,)
编辑 /usr/local/kafka/config/server.properties
配置内容如下:

broker.id=1
host.name=10.10.10.51
advertised.listeners=PLAINTEXT://10.10.10172.16.135.51: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=/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
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.10.10.51:2181,10.10.10.52:2181,10.10.10.53:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

3、启动并检查是否启动
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
用jps命令查看是否启动
jps
如能看到kafka及进程号,说明启动成功。
4、创建topic,此topic设置为2副本 3分区 名字为logstash
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 2 --partitions 3 --topic logstash
检查topic是否创建成功
/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper node1:2181
至此,kafka安装成功。
三、安装es集群
参考文档:https://blog.csdn.net/qq_34021712/article/details/79330028
1、软件下载与安装
下载地址:https://www.elastic.co/downloads/elasticsearch 找自己需要的版本下载,我这里用的6.4.2

wget -P /tmp https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz
cd /tmp
tar zxf  elasticsearch-6.4.2.tar.gz
cp -rf elasticsearch-6.4.2 /usr/local
ln -s /usr/local/elasticsearch-6.4.2  /usr/local/elasticsearch
mkdir -p /data/elasticsearch/{data,logs}
useradd es
chown -R es:es /usr/local/elasticsearch
chown -R es:es /data/elasticsearch

2、修改配置文件(三台机器,仅node.name不同)
编辑配置文件/usr/local/elasticsearch/config
内容如下:

cluster.name: es-cluster
node.name: node1
node.master: true
node.data: true
node.ingest:  true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["10.10.10.51:9300", "10.10.10.52:9300", "10.10.10.53:9300"]
discovery.zen.minimum_master_nodes: 2

3、修改系统配置
编辑/etc/security/limits.conf
添加内容:

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

#我选择锁住swapping因此需要在这个配置文件下再增加两行代码

es soft memlock unlimited
es hard memlock unlimited

编辑/etc/sysctl.conf
添加内容

vm.max_map_count=6553600
fs.file-max=655360

4、启动三台es
请用es用户启动

su - es
/usr/local/elasticsearch/bin/elasticsearch -d

或者在root直接运行:
su - es -c "/app/elasticsearch-6.4.2/bin/elasticsearch -d"
利用jps查看elasticsearch 是否启动成功
5、安装elasticsearch-head(任一一台机器安装即可)
安装此插件可以方便查看和操作es,可以选择安装,参考以下链接。
https://blog.csdn.net/qq_34021712/article/details/79329919

四、安装logstash
1、下载安装
下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz

wget -P /tmp https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz
cd /tmp
tar zxf logstash-6.4.2.tar.gz
cp -rf logstash-6.4.2 /usr/local
ln -s /usr/local/logstash-6.4.2  /usr/local/logstash

2、编辑配置文件(三台服务器仅仅client_id不一样)
/usr/local/logstash/config/logstash.conf
内容如下:

input {
kafka {
bootstrap_servers => "node1:9092,node2:9092,node3:9092"
topics => ["topic-logstash"]
client_id => "logstash-id-1"
group_id => "logstash"
consumer_threads => 1
decorate_events => true
codec => "json"
auto_offset_reset => "latest"
}
}
output {
 if "system-log" in [tags]  {
elasticsearch {
hosts => ["node1:9200","node2:9200","node3:9200"]
codec => "json"
index => "index-system-%{+YYYY.MM.dd}"
}
}
}

3、启动服务,并检查服务
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf > /dev/null &
上条命令是后台运行,如果需要调试,可以直接使用 /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstash.conf
同样运行jps可以检查服务是否运行起来
五、安装filebeat(elk相关组件统一使用6.4.2)
1、下载rpm安装包地址:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.2-x86_64.rpm
2、任意一台需要搜集日志的服务器上安装filebeat
rpm -ivh filebeat-6.4.2-x86_64.rpm
3、编辑配置文件(这里只配置了系统日志的监控)
/usr/local/filebeat/filebeat.yml

logging.metrics.enabled: false
filebeat.inputs:
- type: log
            enabled: true
            tags: ["system-log"]
            tail_files: true
            paths:
                    - /var/log/*.log
output.kafka:
            enable: true
            hosts: ["node1:9092", "node2:9092", "node3:9092"]
            topic: topic-logstash
            partition.round_robin:
                reachable_only: false
            required_acks: 1
            compression: gzip
            max_message_bytes: 1000000

tail_files:true 这个配置的作用是,旧日志不再导入系统,新进来的日志才会被导入系统
六、安装kibana(任一一台机器安装即可)
1、下载并安装
下载地址:https://www.elastic.co/downloads/kibana 选择需要的版本

wget -P /tmp  https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz
cd /tmp
tar zxf kibana-6.4.2-linux-x86_64.tar.gz
cp -rf kibana-6.4.2-linux-x86_64 /usr/local/
ln -s /usr/local/kibana-6.4.2-linux-x86_64 /usr/local/kibana

2、编辑配置文件
/usr/local/kibana/config/kibana.yml

server.host: "0.0.0.0"
elasticsearch.url: "http://node1:9200"

elasticsearch.url 随便填三台当中的一台即可。
3、启动kibana
/usr/local/kibana/bin/kibana
检查15601端口是否已经起来,并且浏览器打开http://172.16.135.51:5601 看是否能看到页面,如果有则表示安装成功。
也可以后台启动
nohup /usr/local/kibana/bin/kibana &
七、导入数据测试
1、在装有filebeat的机器上的/var/log/下创建test.log,并写入一条日志

touch /var/log/test.log
echo "this is a test" >> /var/log/test.log

2、查看kafka的logstash组的队列长度,以及此信息的消费情况
/usr/local/kafka/bin/kafka-consumer-groups.sh --bootstrap-server node1:9092 --group logstash --describe
3、同过elasticsearch-head查看,有没有建立index
4、在kibana中创建index,并在discover中选中刚才的index,查看是否有"this is a test" 的这条数据
如果没有数据,需要分别从filebeat>kafka>logstah>es>kibana检查,逐级排查问题
八、安装x-pack
x-pack 可以实现权限管理,增加安全性。
x-pack的安装与破解,参考两片文章:
https://www.xiaocaicai.com/2018/08/x-pack-6-4-0-%E7%A0%B4%E8%A7%A3/
http://www.cnblogs.com/panwenbin-logs/p/9674845.html
安装x-pack之后,有几个地方需要写入账号密码:
1、elasticsearch-head 访问的时候需要用户名密码,详情请参考:https://blog.csdn.net/qq_34021712/article/details/79329919
2、logstash 写入es的时候需要用户名和密码,如下:

elasticsearch {
                hosts => ["node1:9200","node2:9200","node3:9200"]
                codec => "json"
                index => "index-other-%{+YYYY.MM.dd}"

                user => "elastic"
                password => "elastic"

3、kibana 需要配置用户名密码:

 elasticsearch.url: "http://node1:9200"
elasticsearch.username: elastic
elasticsearch.password: elastic

九、遇到的问题
1、当数据量很大的时候由于logstash频繁的向es发起写的操作,可能导致es写超时,这是可以通过优化logstah来调整。
参考https://blog.csdn.net/houzhe_adore/article/details/51315036
/usr/local/logstash-6.4.2-2/config/logstash.yml 中修改如下参数

pipeline.batch.size: 1000  #单次数据量的大小
pipeline.batch.delay: 120 #等待时间

2、es,logstash的java堆默认只有1G,严重影响效率,可以根据实际情况调整。
配置文件分别为
/usr/local/elasticsearch/config/jvm.options

-Xms6g
-Xmx6g

/usr/local/logstash/config/jvm.options

-Xms2g
-Xmx2g

3、filebeat 在向kafka写数据的时候会出现数据只被写到同一个分区的情况,需要实现多个分区的负载均衡,需要在filebeat中做如下配置

partition.round_robin:
                reachable_only: false

4、es 无法启动提示max number of threads [1024] for user [es] is too low, increase to at least [4096]
修改配置文件 /etc/security/limits.d/90-nproc.conf
修改成

* soft nproc 4096

5、kibana 安装完成后,无法对elastic集群进行监控
这是因为集群中缺少ingest节点,增加一个ingest节点即可
6 、kibana 制图过程中geoip出现 index pattern does not contain any of the following field types: geo_point
需要将nginx的index名字改成logstash开头的名字
详情参考如下链接
https://blog.csdn.net/yanggd1987/article/details/50469113
7、kibana 里面的地图可以更换成高德地图
vim /usr/local/kibana/kibana.yml #在配置文件的最后添加如下内容,重启kibana
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

最后上几张新版elk的图:
记一次从elk到elfk的升级
记一次从elk到elfk的升级
记一次从elk到elfk的升级

转载于:https://blog.51cto.com/jesus110/2358954

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值