分类 大数据组件 下的文章

原创,转发请声明出处啊,亲!

ELK什么

ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。
ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。
Logstash是一个具有实时传输能力的数据收集引擎,用来进行数据收集(如:读取文本文件)、解析,并将数据发送给ES。
Kibana为 Elasticsearch 提供了分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度表格、图形。
Filebeat是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

整体架构

我将应用部署在了不同的docker容器中,ELK部署在了不同的宿主机上。
ELK整体架构.png

docker->宿主机

首先统一了所有应用的日志输出规范,包括日志的划分,输出格式,命名格式等等。然后将docker内部应用的日志挂载到了宿主机目录,方便filebeat的读取。挂载方式可查看文章《docker数据卷

宿主机log日志->filebeat

因为应用只部署在了一台宿主机上,所以只采用了一个filebeat进行读取,配置文件是分开划分的,整体架构如下:
filbeat读取分发.png
具体Filebeat配置讲解在接下来文章中讲述。

Filebeat->redis

Filebeat将根据设置type的不同将之转发给redis的不同库,做缓存。

Redis->Logstash

logstash开启多个pipeline通道分别读取redis库中的数据,并将之使用fileter解析,最后分发给不同的elasticsearch索引。logstash会在接下来文章中具体讲解。
注:logstash读取完redis库中的数据会将数据删除。
logstash配置.png

Logstash->Elasticseaarch

logstash将数据传输到elasticsearch中时,会在es中自动创建索引,为了使es中的新建索引符合一定格式,我使用了es新建索引模板,指定新建索引的Mapping。会在接下来的文章中具体讲解。

Elasticsearch->Kibana

Kibana通过得到的数据进行统计分析,来实时监控应用的状况。

结论

整体的配置如上述描述,建议大家没事多翻翻官方文档,文档写不清楚的地方,就要自己多配置几次多尝试,毕竟坑都是要一点一点填的。
elastic官网

背景介绍
使用elasticsearch时,在集群中进行快照是可能需要使用nfs挂载共享目录,接下来记录下如何使用nfs挂载共享目录。

1.使用root用户进入/etc/exports 文件下配置允许访问的机器的ip以及本机公开的文件目录

/home/xxx/software/es_backup xx.x.x.194(rw)
/home/xxx/software/es_backup xx.x.x.193(rw)

解释:第一个是公开的文件目录,第二个是允许访问机器的ip第三个括号内(rw)是允许读写。

2.启动nfs

service nfs restart

如果不行的话。可以在启动nfs之前,事先启动以下三个命令之一。

service portreserve restart
service rpcbind restart
service portmap restart

解释:以上三个命令启动一个即可,因为linux服务器版本不同,所以不一定哪个起作用。

3.在其他机器挂载此共享目录

mount xxx.xxx.xx.xxx:/home/xx/software/es_backup /home/es/software/test
Unmount /home/es/software/test (取消挂载)

解释:mount 后面跟随的是共享目录主机的ip与文件所在目录,以及你本机的需要放置的目录。

unmount 是你取消挂载这个目录。

4.其他问题

如果nfs出现问题,可能会出现 df ls等等命令无法使用,这样你可以使用

mount |grep nfs 

查看你挂载了的哪些节点,然后将之取消挂载。

注意:因为es不允许root用户启动,所以需要新建新的用户来启动es

1.环境需求

新建普通用户es,单独为普通用户配置java11环境(es7需要java11 支持),然后在~/.bash_profile文件中配置好java环境变量:

export JAVA_HOME=~/software/jdk-11.0.3(java11所在地址 ~表示用户默认目录)
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

注意:配置好之后别忘记source ~/.bash_profile使环境变量生效。

查看java版本

java -version

每当启动es时,找不到java黄精,或java环境不对,都可以使用“source ~/.bashrc”启动一次,因为有时候有些系统启动是不默认运行bash_profile,当然在bashrc文件下添加环境变量也是一样。

2.配置elasticsearch.yml文件

进入elasticsearch/config文件夹下

#允许任意IP访问

network.host:0.0.0.0

#开放的端口

http.port: 9200

设置节点是否为master节点(true or false)

node.master: true

设置节点存储数据(true or false)

node.data: true

#集群间通信端口(可以修改)

transport.tcp.port: 9300

#添加跨域

http.cors.enabled: true
http.cors.allow-origin: "*"

#集群名称

cluster.name: es

#节点名称(集群内部节点名称不能相同)

node.name: master

#集群所有节点配置(你主机的ip地址,以及集群中es主机的ip地址,9300为es集群之间默认通信端口,要与设置的集群通信端口一致)如果只有一台设置只设置自己主机的就可以

discovery.seed_hosts: ["xx.xx.xx.xx:9300", "10.1.8.194:9300"]

集群内部master节点配置

cluster.initial_master_nodes: ["xx.xx.xx.xx:9300","xx.xx.xx.xx:9300"]

解释:设置两个节点为master节点如果一个节点挂了,另一个节点可以补上

#解决java.lang.UnsupportedOprationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled

因为Centos不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动

bootstrap.memory_lock: false
bootstrap.system_call_filter: false

3.系统配置问题(存在以下错误是在配置)

问题一:

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

解决切换到root用户

vim /etc/security/limits.conf

添加或修改如下内容

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

问题二

max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf

修改如下内容:

* soft nproc 1024

#修改为

* soft nproc 2048

问题三

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=262144

并执行命令:

sysctl -p

4. 防火墙

关闭防火墙

service iptables stop

或者将9200端口开启(这个没试)