写在最前面
本文仅包含ELK7.3.0部署!
部署环境:
系统 CentOS 7 Docker Docker version 19.03.5 CPU 2核 内存 2.5G 磁盘 30G(推荐设置,磁盘不足可能会引发es报错) Filebeat v7.3.0,单节点 ElasticSearch v7.3.0,两份片 Kibana v7.3.0,单节点 Logstash v7.3.1,单节点
ELK分布式集群部署方案
linux中elasticsearch用户拥有的内存权限太小,至少需要262144,报错信息(max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]),因此先修改系统配置。
# 修改配置sysctl.conf vi /etc/sysctl.conf # 添加下面配置: vm.max_map_count=262144 # 重新加载: sysctl -p # 最后重新启动elasticsearch,即可启动成功。
环境均采用Docker部署,为了更方便的使用Docker命令,我们安装一下bash-completion自动补全插件:
# 安装依赖工具bash-complete yum install -y bash-completion ource /usr/share/bash-completion/completions/docker source /usr/share/bash-completion/bash_completion
部署顺序:ES --> Kibana --> Logstash --> Filebeat
ElasticSearch7.3.0部署
主节点部署
创建配置文件和数据存放目录
mkdir -p {/mnt/es1/master/data,/mnt/es1/master/logs} vim /mnt/es1/master/conf/es-master.yml
es-master.yml配置
# 集群名称 cluster.name: es-cluster # 节点名称 node.name: es-master # 是否可以成为master节点 node.master: true # 是否允许该节点存储数据,默认开启 node.data: false # 网络绑定 network.host: 0.0.0.0 # 设置对外服务的http端口 http.port: 9200 # 设置节点间交互的tcp端口 transport.port: 9300 # 集群发现 discovery.seed_hosts: - 172.17.0.2:9300 - 172.17.0.3:9301 # 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算 cluster.initial_master_nodes: - 172.17.0.2 # 支持跨域访问 http.cors.enabled: true http.cors.allow-origin: "*" # 安全认证 xpack.security.enabled: false #http.cors.allow-headers: "Authorization" bootstrap.memory_lock: false bootstrap.system_call_filter: false #解决跨域问题 #http.cors.enabled: true #http.cors.allow-origin: "*" #http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE #http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
pull镜像时会有些慢,耐心等待!
# 拉取镜像,可以直接构建容器,忽略此步 docker pull elasticsearch:7.3.0 # 构建容器 ## 映射5601是为Kibana预留的端口 docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 -p 5601:5601 -v /mnt/es1/master/conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mnt/es1/master/data:/usr/share/elasticsearch/data -v /mnt/es1/master/logs:/usr/share/elasticsearch/logs -v /etc/localtime:/etc/localtime --name es-master elasticsearch:7.3.0
/etc/localtime:/etc/localtime:宿主机与容器时间同步。
从节点部署
创建配置文件和数据存放目录
mkdir -p {/mnt/es1/slave1/data,/mnt/es1/slave1/logs} vim /mnt/es1/slave1/conf/es-slave1.yml
es-slave1.yml配置
# 集群名称 cluster.name: es-cluster # 节点名称 node.name: es-slave1 # 是否可以成为master节点 node.master: true # 是否允许该节点存储数据,默认开启 node.data: true # 网络绑定 network.host: 0.0.0.0 # 设置对外服务的http端口 http.port: 9201 # 设置节点间交互的tcp端口 transport.port: 9301 # 集群发现 discovery.seed_hosts: - 172.17.0.2:9300 - 172.17.0.3:9301 # 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算 cluster.initial_master_nodes: - 172.17.0.2 # 支持跨域访问 http.cors.enabled: true http.cors.allow-origin: "*" # 安全认证 xpack.security.enabled: false #http.cors.allow-headers: "Authorization" bootstrap.memory_lock: false bootstrap.system_call_filter: false
pull镜像时会有些慢,耐心等待!
# 拉取镜像,可以直接构建容器,忽略此步 docker pull elasticsearch:7.3.0 # 构建容器 docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -p 9201:9200 -p 9301:9300 -v /mnt/es1/slave1/conf/es-slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mnt/es1/slave1/data:/usr/share/elasticsearch/data -v /mnt/es1/slave1/logs:/usr/share/elasticsearch/logs -v /etc/localtime:/etc/localtime --name es-slave1 elasticsearch:7.3.0
修改配置重启容器
# 查看主从容器IP docker inspect es-master docker inspect es-slave1
修改ES配置文件es-master.yml、es-slave1.yml中的discovery.seed_hosts、cluster.initial_master_nodes为对应的IP!重启容器:
docker restart es-master docker restart es-slave1 # 查看es日志 docker logs -f --tail 100f es-master
访问http://IP:9200/_cat/nodes确认查看ES集群信息,可以看到有主从节点部署成功:
节点部署常用API:
API 功能 http://IP:9200 查看ES版本信息 http://IP:9200/_cat/nodes
查看所有分片
http://IP:9200/_cat/indices 查看所有索引Kibana7.3.0部署
创建Kibana配置文件
vim /mnt/kibana.yml # ## ** THIS IS AN AUTO-GENERATED FILE ** ## # ## Default Kibana configuration for docker target server.name: kibana #配置Kibana的远程访问 server.host: "0.0.0.0" #配置es访问地址 elasticsearch.hosts: [ "http://127.0.0.1:9200" ] #汉化界面 i18n.locale: "zh-CN" #xpack.monitoring.ui.container.elasticsearch.enabled: true
查看es-master容器ID
docker ps|grep es-master
部署Kibana
注意将命令中的40eff5876ffd 修改成es-master容器ID,拉取镜像,情耐性等待!
# 拉取镜像,可以直接构建容器,忽略此步 docker pull docker.elastic.co/kibana/kibana:7.3.0 # 构建容器 ## --network=container 表示共享容器网络 docker run -it -d -v /mnt/kibana.yml:/usr/share/kibana/config/kibana.yml -v /etc/localtime:/etc/localtime -e ELASTICSEARCH_URL=http://172.17.0.2:9200 --network=container:40eff5876ffd --name kibana docker.elastic.co/kibana/kibana:7.3.0
查看Kibana容器日志,看到如下图所示日志则表示启动成功
docker logs -f --tail 100f kibana
访问http://IP:5601,可能会出现503,等一会在访问就OK了。可以访问到Kibana控制台则表示Kibana已安装成功,并已于es-master建立连接。
Logstash7.3.1部署
编写Logstash配置文件
vim /mnt/logstash-filebeat.conf
input { # 来源beats beats { # 端口 port => "5044" } } # 分析、过滤插件,可以多个 filter { grok { # grok 表达式存放的地方 patterns_dir => "/grok" # grok 表达式重写 # match => {"message" => "%{SYSLOGBASE} %{DATA:message}"} # 删除掉原生 message字段 overwrite => ["message"] # 定义自己的格式 match => { "message" => "%{URIPATH:request} %{IP:clientip} %{NUMBER:response:int} \"%{WORD:sources}\" (" } } # 查询归类插件 geoip { source => "message" } } output { # 选择elasticsearch elasticsearch { # es 集群 hosts => ["http://172.17.0.2:9200"] #username => "root" #password => "123456" # 索引格式 index => "omc-block-server-%{[@metadata][version]}-%{+YYYY.MM.dd}" # 设置为true表示如果你有一个自定义的模板叫logstash,那么将会用你自定义模板覆盖默认模板logstash template_overwrite => true } }
部署Logstash
# 拉取镜像,可以直接构建容器,忽略此步 docker pull logstash:7.3.1 # 构建容器 # xpack.monitoring.enabled 打开X-Pack的安全和监视服务 # xpack.monitoring.elasticsearch.hosts 设置ES地址,172.17.0.2为es-master容器ip # docker允许在容器启动时执行一些命令,logsatsh -f 表示通过指定配置文件运行logstash,/usr/share/logstash/config/logstash-sample.conf是容器内的目录文件 docker run -p 5044:5044 -d -v /mnt/logstash-filebeat.conf:/usr/share/logstash/config/logstash-sample.conf -v /etc/localtime:/etc/localtime -e elasticsearch.hosts=http://172.17.0.2:9200 -e xpack.monitoring.enabled=true -e xpack.monitoring.elasticsearch.hosts=http://172.17.0.2:9200 --name logstash logstash:7.3.1 -f /usr/share/logstash/config/logstash-sample.conf
这里需要注意es集群地址,这里我们只配置es-master的ip(172.17.0.2),详细Logstash配置。 查看到如下日志则表示安装成功:
Filebeat7.3.0部署
Filebeat 并不是一个必须的组件,通过Logstash我们同样也可以实现日志的搬运工作。
例如,实现将所有非“20”开头的日志进行合并,可以使用如下Logstash配置:
input { # 来源beats beats { # 端口 port => "5044" } file { type => "server-log" path => "/logs/*.log" start_position => "beginning" codec=>multiline{ // 正则表达式,所有“20”前缀日志, 如果你的日志是以“[2020-06-15”这类前缀则,可以替换成"^[" pattern => "^20" // 是否对正则规则取反 negate => true // previous 表示合并到上一行,next 表示合并到下一行 what => "previous" } } }
注意,Filebeat必须与应用部署在同一服务器,这里应用采用docker部署,/mnt/omc-dev/logs应用日志文件的映射目录,如果你也是通过docker进行服务部署,请记得通过【-v /mnt/omc-dev/logs:/应用工作/logs】日志文件映射出来哦!
创建Filebeat配置文件
## /mnt/omc-dev/logs 为应用日志目录,必须将应用的部署目录映射出来 mkdir -p {/mnt/omc-dev/logs,/mnt/filebeat/logs,/mnt/filebeat/data} vim /mnt/filebeat/filebeat.yml
filebeat.inputs: - type: log enabled: true paths: # 当前目录下的所有.log文件 - /home/project/spring-boot-elasticsearch/logs/*.log multiline.pattern: '^20' multiline.negate: true multiline.match: previous logging.level: debug filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 setup.dashboards.enabled: false setup.kibana: host: "http://172.17.0.2:5601" # 不直接传输至ES #output.elasticsearch: # hosts: ["http://es-master:9200"] # index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}" output.logstash: hosts: ["172.17.0.5:5044"] #scan_frequency: 1s close_inactive: 12h backoff: 1s max_backoff: 1s backoff_factor: 1 flush.timeout: 1s processors: - add_host_metadata: ~ - add_cloud_metadata: ~
注意修改Logstash IP和端口。
# 拉取镜像,可以直接构建容器,忽略此步 docker pull docker.elastic.co/beats/filebeat:7.3.0 # 构建容器 ## --link logstash 将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况,logstash 为容器名 docker run -d -v /mnt/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /mnt/omc-dev/logs:/home/project/spring-boot-elasticsearch/logs -v /mnt/filebeat/logs:/usr/share/filebeat/logs -v /mnt/filebeat/data:/usr/share/filebeat/data -v /etc/localtime:/etc/localtime --link logstash --name filebeat docker.elastic.co/beats/filebeat:7.3.0
查看日志,我们在配置文件中将Filebeat的日志级别配置成了debug,因此会开到所有收录到的信息
docker logs -f --tail 100f filebeat
可以看到,通过查询ES索引,多出了三条索引,通过我们配置的按天进行索引分割,因为我这个环境已经跑了三天了,所以存在三个omc服务的索引(omc 是一个定时任务的服务,你也可以写一个简单的定时任务来进行测试)。
接下来我们创建一个Kibana索引模式,并进行日志查询:
索引创建完成,到Discover视图就可以通过索引模式查询日志了。
文章到这里就结束了,如果你还有别的服务需要引入的话,只需要将日志挂载到指定目录就行了,当然如果服务是部署在其他服务器上,则需要在服务器上部署Filebeat,并且要保证服务器之间网络互通哦~~
最后,在这里推荐一个开源ELK自动化Docker部署项目:https://github.com/deviantony/docker-elk.git
--------------------------------------------------------
2020.6.28更新
最近发生了一起Logstash导致的物理内存暴涨问题。
简单阐述一下主要问题:
目前单服务单日日志量在2.2GB左右,由于早期没有限制Logstash内存,导致大量数据上来时,Logstash疯狂占用内存与IO。
随着近日,在同一服务器上面应用服务流量上涨,最终导致内存不足,出现OutOfMemoryError问题。
随后,通过设置优化JVM内存(具体我就不说了,网上一大把),并添加上Logstash响应内存配置,得以解决早前的遗留问题。
最后,将Logstash 添加到Kibana进行监控(当然你还可以将Logstash日志配置到ES上去):
https://blog.csdn.net/QiaoRui_/article/details/97667293
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 潘盈.1993-旧情绵绵【名将】【WAV+CUE】
- 西野カナ《Loveit》24-96[FLAC]
- 群星2016-《环球词选周礼茂》[环球][WAV+CUE]
- XSProject-Бочкабасколбаср(TheBestOf)(LimitedEdition)[2024][WAV]
- 群星1997 《国语卖座舞曲大碟》引进版[WAV+CUE][1.1G]
- 汪峰 白金超精选专辑《笑着哭》[WAV+CUE][1G]
- 群星1998《舞池中98》香港首版[WAV+CUE]
- 林忆莲.2006-回忆莲莲3CD【滚石】【WAV+CUE】
- 品冠.2002-U-TURN180°转弯【滚石】【WAV+CUE】
- 温岚.2001-有点野【阿尔发】【WAV+CUE】
- 房东的猫2018-柔软[科文音像][WAV+CUE]
- 黄乙玲1993-台湾歌古早曲[台湾首版][WAV+CUE]
- 黑鸭子2008-男人女人[首版][WAV+CUE]
- 张佳佳 《FOLK SONG Ⅱ Impromptus OP.23(即兴曲7首)》[320K/MP3][98.71MB]
- 祖海 《我家在中国 (维也纳金色大厅独唱音乐会)》[320K/MP3][118.55MB]