ELK
1、elasticsearch
部署
单机
解压
# tar xf elasticsearch-6.8.23.tar.gz -C /usr/local/src/
# useradd linewell
# chown -R linewell:linewell /usr/local/src/elasticsearch-6.8.23/
# vim /etc/security/limits.conf
linewell soft nofile 65536
linewell hard nofile 65536
linewell soft nproc 4096
linewell hard nproc 4096
# vim /etc/sysctl.conf
vm.max_map_count=262144
# sysctl -p
# cd /usr/local/src/elasticsearch-6.8.23/
# vim config/elasticsearch.yml
#集群名称
cluster.name: my-cluster
#节点名称
node.name: node-1
#数据存放路径
path.data: /var/lib/elasticsearch
#日志存放路径
path.logs: /var/log/elasticsearch
#监听IP
network.host: 192.168.10.179
#监听端口
http.port: 28700
#集群各主机地址,单机模式就一个本机IP
discovery.zen.ping.unicast.hosts: ["192.168.10.179"]
# cd /var/lib
# mkdir elasticsearch
# cd /var/log
# mkdir elasticsearch
# chown -R linewell:linewell /var/log/elasticsearch
# chown -R linewell:linewell /var/lib/elasticsearch
# su linewell
# ./bin/elasticsearch
9200 是ES节点与外部通讯使用的端口。它是http协议的RESTful接口(各种CRUD操作都是走的该端口,如查询:http://localhost:9200/user/_search)。
9300是ES节点之间通讯使用的端口。它是tcp通讯端口,集群间和TCPclient都走的它。(java程序中使用ES时,在配置文件中要配置该端口)
集群
查看cpu数量
# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看cpu内核数量
# cat /proc/cpuinfo| grep "cpu cores"| uniq
查看cpu型号
# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看服务器信息
# uname -a
注意:es7以上需要jdk11,且不能用root用户启动
1、修改最大文件数和锁内存限制以及用户最大线程数
# vim /etc/security/limits.d/20-nproc.conf
was soft nproc 20000
* soft nproc 4096
root soft nproc unlimited
# vim /etc/security/limits.conf
* soft nofile 300000
* hard nofile 300000
* soft nofile 65536
* hard nofile 65536
* hard memlock unlimited
* soft memlock unlimited
查看结果
# ulimit -a
2、更改单个进程拥有的最大内存限制并禁用swap
# vim /etc/sysctl.conf
vm.max_map_count=262144
vm.swappiness=1
# sysctl -p
3、解压修改配置文件
# vim /usr/local/elasticsearch/config/jvm.options
-Xms4g 不要超过内存的一半
-Xmx4g
# vim /usr/local/elasticsearch/config/elasticsearch.yml
cluster.name: es-cluster
node.name: es009
node.attr.rack: r1 指定节点的部落属性,这是一个比集群更大的范围 node.master(是否主节点) node.data(是否存储数据)
path.data: /usr/local/es/es_data
path.logs: /usr/local/es/es_logs
bootstrap.memory_lock: false 是否锁定内存,提高ES性能
bootstrap.system_call_filter: false
network.host: 192.168.105.208
http.port: 9200
transport.tcp.port: 9300
transport.tcp.compress: true
transport.profiles.default.port: 9300
http.cors.enabled: true 跨第三方插件访问
http.cors.allow-origin: "*"
discovery.zen.minimum_master_nodes: 2
discovery.seed_hosts: ["192.168.105.208", "192.168.105.209", "192.168.105.210"]
cluster.initial_master_nodes: ["es009", "es010", "es011"]
gateway.recover_after_nodes: 3
4、配置hosts及es环境变量
192.168.105.208 es009
192.168.105.209 es010
192.168.105.210 es011
export ES_HOME=/usr/local/elasticsearch
export PATH=$ES_HOME/bin:$PATH
5、切换用户启动
su linewell
./elasticsearch
管理
1.MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index)。
2.MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。
3.MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(Document)和多 Field 组成。
4.MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。
5.MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。
6.MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。
7.MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。
8.MySQL 中的数据迁移等价于 ES 中的 reindex 操作。
数据备份
前提:
备份的目录要进行nfs目录共享
# yum install nfs-utils -y
服务端
# vim /etc/exports
/data/es/snapshot 192.168.105.209(rw,sync,no_root_squash)
/data/es/snapshot 192.168.105.210(rw,sync,no_root_squash)
# systemctl restart nfs
# showmount -e 192.168.105.208
Export list for 192.168.105.208:
/data/es/snapshot 192.168.105.210,192.168.105.209
客户端
# systemctl start nfs
# showmount -e 192.168.105.208
Export list for 192.168.105.208:
/data/es/snapshot 192.168.105.210,192.168.105.209
# mount 192.168.105.208:/data/es/snapshot /data/es/snapshot
# df -Th
旧机器
1、修改elasticsearch.yml,添加仓库配置
path.repo: ["/data/es/snapshot"]
2、重启es
3、在/data/es/snapshot下新建名为bro_backup的仓库
# curl -XPOST '192.168.105.208:9200/_snapshot/bro_backup' -H 'Content-Type: application/json' -d '{ "type": "fs", "settings": { "location": "/data/es/snapshot", "compress": true, "chunk_size": "1g","max_snapshot_bytes_per_sec": "50m", "max_restore_bytes_per_sec": "50m"}}'
注意:max_snapshot_bytes_per_sec 和max_restore_bytes_per_sec 为了限制备份和恢复时的速度,保证/data/es/snapshot文件夹权限
# chown -R es:es /data/es/snapshot
4、备份数据
备份全部
# curl -XPUT "192.168.105.208:9200/_snapshot/bro_backup/ss_2019100905?wait_for_completion=true"
wait_for_completion=true参数:在前台运行,查看备份状态
备份部分index
curl -XPUT http://192.168.105.208:9200/_snapshot/bro_backup/ss_2019100905 -d '
{
"indices": "index_1,index_2"
}'
终止备份
# curl -XDELETE http://192.168.105.208:9200/_snapshot/bro_backup/ss_2019100905
查看备份信息
# curl -XGET http://192.168.105.208:9200/_snapshot/bro_backup/ss_2019100905
新机器
1、修改elasticsearch.yml,添加仓库配置
path.repo: ["/data/es/snapshot"]
2、重启es
3、在/data/es/snapshot下新建名为bro_backup的仓库
curl -XPOST 'http://192.168.105.229:9200/_snapshot/bro_backup' -H 'Content-Type: application/json' -d '{ "type": "fs", "settings": { "location": "/data/es/snapshot", "compress": true, "chunk_size": "1g", "max_snapshot_bytes_per_sec": "50m", "max_restore_bytes_per_sec": "50m"}}'
4、执行恢复命令
curl -XPOST '192.168.105.208:9200/_snapshot/bro_backup/ss_2019100905/_restore' -H 'Content-Type: application/json' -d'{ "ignore_unavailable": true, "include_global_state": false }'
如果只想恢复某些分片的数据,还可以在json参数里加{"indices": "game_info"},以指定只恢复game_info分片数据。
检查:
# curl http://192.168.105.229:9200/_cat/indices?v
2、logstash
部署
解压
# vim config/logstash.yml
#数据存放路径
path.data: /var/lib/logstash
#监听IP
http.host: "192.168.105.208"
#监听的端口
http.port: 5044
#日志路径
path.logs: /var/log/logstash
# vim /etc/systemd/system/logstash.service
[Unit]
Description=logstash
[Service]
User=root
ExecStart=/usr/local/src/logstash-6.8.23/bin/logstash -f /usr/local/src/logstash-6.8.23/config/nginx-log-es.conf
Restart=always
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# vim nginx-log-es.conf
input {
# 实时监控日志文件的内容,类似tail -f 命令的作用
file {
# nginx日志文件路径
path => [ "/usr/local/nginx/logs/access.log" ]
start_position => "beginning"
ignore_older => 0
}
}
# 配置过滤器对日志文件进行格式化
filter {
# 使用grok插件对日志内容进行格式化,提取日志内容,方便转换成json格式
# %COMBINEDAPACHELOG 是grok插件内置的apache日志内容处理模板,其实就是一些表达式,用来格式日志文本内容,也可以格式化Nginx日志
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
}
# 配置输出目的地,这里配置同步到ES中
output {
elasticsearch {
# es服务器地址
hosts => ["192.168.10.179:28700"]
# 目标索引
index => "access"
}
}
# systemctl start logstash.service
工作原理
Logstash 事件处理管道拥有三个阶段:输入->过滤->输出
输入产生事件,过滤修改事件、输出将修改后的事件输出到任何目的地。输入和输出都支持编解码器,使您可以在数据出入管道时对其进行编码或解码,而不必再使用单独的过滤器
1、inputs:
使用Input插件将数据输入至Logstash中。
常见插件:
file:从文件系统中的文件读取数据。
syslog:侦听514端口上的syslog消息并根据RFC3164格式进行解析
reids:同时使用 redis 通道和 redis 列表从 redis 服务器上读取数据
beats:处理通过 Beats 发送的事件
2、filters:
过滤器插件是在 Logstash 管道中的中间处理设备。如果事件符合特定的条件,则可以将过滤器与条件结合使用以对事件执行操作
常见插件:
grok:解析和结构化抽象的文本信息。Grok 是目前在 Logstash 中解析非结构化日志数据的最佳方式。其拥有120种内置的解析模式。
mutate:对事件字段执行转换。可以重命名,删除,代替和修改事件种的字段。
drop:完全删除事件,例如调试事件。
clone:对事件进行复制。
geoip:添加有关IP地址地理位置的信息。
3、outputs
输出是 Logstash 管道的最后阶段。一个事件可以通过多个输出进行传递,但一旦所有输出处理都完成了,该事件就完成了全部流程的执行
常见插件:
elasticsearch:发送事件数据到 ES 中
file:将事件数据写入到硬盘中的文件
4、Codecs:
编解码器是最基本的流过滤器,它可以作为输入或输出的一部分进行操作。编解码器使您可以轻松地将消息的传输与序列化过程分开
常见编解码器:
json:以 Json 格式对数据进行编码或解码
multiline:合并多行文本事件例如Java异常和stacktrace消息进单个事件
3、kibana
部署
# vim config/kibana.yml
server.port: 5601
server.host: "192.168.105.208"
server.name: "es009"
elasticsearch.hosts: ["http://192.168.105.208:9200","http://192.168.105.209:9200","http://192.168.105.210:9200"]
kibana.index: ".kibana"
pid.file: /var/run/kibana.pid
i18n.locale: "zh-CN"
# chown es:es /var/run/kibana.pid
# chown -R es:es /usr/local/kibana
# su es
# ./kibana
4、es_head
安装部署
es_head是node.js写的,需要node环境
1、安装node、phantomjs、包
# tar xf node-v10.24.1-linux-x64.tar.gz -C /usr/local/
#tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/
# vim /etc/profile
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
export PHANTOMJS_HOME=/usr/local//usr/local/phantomjs-2.1.1-linux-x86_64
export PATH=$PHANTOMJS_HOME/bin:$PATH
# yum install bzip2 -y
2、改属主、属组
# chown -R /usr/localelasticsearch-head
3、更换淘宝源并安装
# npm config set registry https://registry.npm.taobao.org
# npm install --unsafe-perm
4、修改配置文件
# vim Gruntfile.js
connect: {
server: {
options: {
hostname:'192.168.105.208',
port: 9100,
base: '.',
keepalive: true
}
}
}
5、启动
# npm run start
5、jobadmin
安装部署
任务调度中心
https://github.com/xuxueli/xxl-job
# git clone http://gitee.com/xuxueli0323/xxl-job
# git clone git@gitee.com:xuxueli0323/xxl-job.git
导入数据
# mysql -uroot -p'Cc..2023' < tables_xxl_job.sql
mysql> show tables;
+--------------------+
| Tables_in_xxl_job |
+--------------------+
| xxl_job_group |
| xxl_job_info |
| xxl_job_lock |
| xxl_job_log |
| xxl_job_log_report |
| xxl_job_logglue |
| xxl_job_registry |
| xxl_job_user |
+--------------------+
配置连接
# vim xxl-job-admin/src/main/resources/application.properties
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=Cc..2023
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# mvn clean package
# java -jar xxl-job-admin-2.4.1-SNAPSHOT.jar
地址:http://192.168.105.208:8088/xxl-job-admin/