共计 28601 个字符,预计需要花费 72 分钟才能阅读完成。
ELK+Kafka+FileBeat 高可用集群
环境筹备
- 点击查看 ELK 对操作系统是否兼容
- 点击查看 ELK 对 JDK 是否兼容信息列表
ELK 是 Elasticsearch ,Logstash, Kibana 的简称缩写, 次要专一于可视化日志剖析和查问
Elastic Stack 次要包含三大部分:
海量数据存储和检索 ----- Elasticsearch 分布式存储和查问
可视化界面和图表生成 ----Kibana 可提供可视化界面和各种图表的生成。
可视化界面和图表生成 ----Kibana 可提供可视化界面和各种图表的生成。
ELK 不过是 Elastic Stack 用法中日志剖析栈的一部分
阐明:
- 不晓得你们有没有留神到,官网仿佛曾经无意在应用 FileBeat 替换 Logstash 采集日志了。
- Logstash 是由 Elastic 公司推出的一款开源的服务器端数据处理管道,可能同时从多个起源采集数据,转换数据,而后将数据发送指定的存储库中。Logstash 官网介绍。
- Filebeat 是 Elastic 公司为解决 Logstash“太重”的问题推出的一款轻量级日志采集器,在解决数量泛滥的服务器、虚拟机和容器生成的日志时可应用 Logstash + Filebeat 的日志采集形式。Filebeat 官网介绍。
架构图
服务器 IP | 主机名 | 软件列表 |
---|---|---|
10.0.0.11 | Master-1 | Kibana,Prometheus+grafana,node_exporter |
10.0.0.12 | Master-2 | Kibana,kafka,zookeeper,node_exporter |
10.0.0.21 | Node-1 | Elasticsearch,Logstash,kafka,zookeeper,node_exporter |
10.0.0.22 | Node-2 | Elasticsearch,Logstash,kafka,zookeeper,node_exporter |
10.0.0.23 | Node-3 | Elasticsearch,Mysql,Nginx,redis,FileBeat,Logstashnode_exporter |
软件应用版本
elasticsearch-7.16.1-linux-x86_64.tar.gz |
---|
filebeat-7.16.1-linux-x86_64.tar.gz |
logstash-7.16.2-linux-x86_64.tar.gz |
kafka_2.13-3.0.0.tgz |
kibana-7.16.1-linux-x86_64.tar.gz |
prometheus-2.32.1.linux-amd64.tar.gz |
grafana-enterprise-8.3.3.linux-amd64.tar.gz |
网盘链接
链接:https://pan.baidu.com/s/192mr… |
---|
提取码:7777 |
机器的配置都是
批改过程
在 Centos7 Linux 操作系统中,默认单个过程能够关上的最多文件数是 1024
然而 ES 对操作系统有些特殊要求
- 要求操作系统单个过程能够关上的最大文件数起码要达到 65535.
而且 ES 将会应用很多线程, 也须要批改下操作系统限度。
如果不配置就会报错如下所示:
bootstrap checks failed. You must address the points described in the following [3] lines before starting Elasticsearch.
bootstrap check failure [1] of [3]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [3]: max number of threads [3687] for user [elasticsearch] is too low, increase to at least [4096]
bootstrap check failure [3] of [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
查看以后操作系统反对单个过程能够关上的最多文件数,返回值如果没批改会显示 1024
ulimit -n
vim /etc/security/limits.conf
# 在最初增加
* soft nofile 65535
* hard nofile 65535
* hard nproc 4096
* soft nproc 4096
- 设置限度数量,第一列示意用户,* 示意所有用户
- soft nproc:单个用户可用的最大过程数量(超过会正告);
- hard nproc:单个用户可用的最大过程数量(超过会报错);
- soft nofile:可关上的文件描述符的最大数(超过会正告);
- hard nofile:可关上的文件描述符的最大数(超过会报错);
- 原文链接:https://blog.csdn.net/zxljsbk…
- 断开 session 链接,从新登陆失效
vim /etc/sysctl.conf
#增加内容
vm.max_map_count=262144
#vm.max_map_count 配置确保操作系统领有足够多的虚拟内存
#如果应用的是包管理器形式装置,那么不须要这个操作,默认会进行配置。#刷新配置立刻失效,重启一下
sysctl -p
reboot
创立对立目录
mkdir -p /data/software
mkdir -p /data/modules
各个节点上传所需软件安装包(具体看下面表格)
Elasticsearch
elasticsearch 简介
Elasticsearch, 江湖人称 ES, 它是一个实时的分布式存储,搜寻和剖析引擎
为什么用 Elasticsearch?
- 场景一: 当检索“我是中国人”, 一般关系型数据库只能查找 % 我是中国人 % 的记录, 无奈搜寻“我是 中国人”
-
场景二: 找到与查问最匹配的 10 个文档并不艰难。但如果面对的是十亿行日志,又该如何解读呢?
ES 因为领有分布式存储, 分词, 高效海量数据查问的性能, 因而是查问畛域的王者!
类型 | 默认值 | 形容 |
---|---|---|
home | Elasticsearch 主文件夹门路或者 $ES_HOME | |
bin | 二进制脚本, 蕴含开启一个 node 的 elasticsearch 和装置插件的 elasticsearch-plugin 可执行二进制脚本 | |
conf | ES_PATH_CONF | 配置文件包含 elasticsearch.yml |
data | path.data | 节点上调配的每个索引 / 分片的数据文件的地位。能够包容多个地位。 |
logs | path.logs | 日志文件门路 |
plugins | 插件文件配置,每个插件会蕴含在子文件夹下 | |
repo | path.repo | 共享的文件系统存储库地位。能够包容多个地位。能够将文件系统存储库搁置在此处指定的任何目录的任何子目录中。 |
jdk | Elasticsearch 是应用 Java 构建的, 所以 ES 版本中都自带捆绑了一个 Open JDK, 位于 $ES_HOME/jdk 文件夹下 |
$ES_HOME/config 文件夹下有这么几个配置文件
配置文件名称 | 配置文件含意 |
---|---|
elasticsearch.yml | 配置 ES |
jvm.options | 配置 ES 的 JVM 参数 |
log4j2.properties | 配置 ES 的日志 |
elasticsearch 装置
范畴:Node-1,Node-2,Node-3
创立用户
# 创立 es 用户(ELK 都用自建用户启动)useradd es_user
#批改 es 用户明码
passwd es_user
解压装置
# 进入装置目录
cd /data/software/
解压 elasticsearch 安装包
tar -zxvf elasticsearch-7.16.1-linux-x86_64.tar.gz -C /data/module/
批改 JDK 配置
# 进入配置目录
cd /data/module/elasticsearch-7.16.1/bin
#编辑配置文件
vim elasticsearch
#增加环境变量
#配置为 elasticsearch 自带 jdk
export JAVA_HOME=/data/module/elasticsearch-7.16.1/jdk
export PATH=$JAVA_HOME/bin:$PATH
#增加 jdk 判断
if [-x "$JAVA_HOME/bin/java"]; then
JAVA="/data/module/elasticsearch-7.16.1/bin/java"
else
JAVA=`which java`
fi
批改启动配置
# 进入 elasticsearch 的 config 配置目录
cd /data/module/elasticsearch-7.16.1/config
#批改配置文件
vim elasticsearch.yml
Node-1
#node- 1 配置文件
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-1
# ES 默认 只容许本地 127.0.0.1 和[::1] 拜访
# 也能够设置成 0.0.0.0 容许所有 IP 主机拜访
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入正告然而能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会降级为异样,ES 无奈正确启动。network.host: 0.0.0.0
# 默认 ES 节点端口 9200,如果是伪集群(在一台服务器上搭建集群),须要批改。http.port: 9200
# 设置数据寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.data: /data/module/elasticsearch-7.16.1/es/data/es-node-1/
# 设置日志寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.logs: /data/module/elasticsearch-7.16.1/es/log/es-node-1/
# 发现其余节点主机配置 这里配置的是 ES 所在服务器的公网 IP 地址
discovery.seed_hosts: ["10.0.0.21:9300","10.0.0.22:9300","10.0.0.23:9300"]
# 哪些节点能够被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
Node-2
#node- 2 配置文件
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-2
# ES 默认 只容许本地 127.0.0.1 和[::1] 拜访
# 也能够设置成 0.0.0.0 容许所有 IP 主机拜访
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入正告然而能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会降级为异样,ES 无奈正确启动。network.host: 0.0.0.0
# 默认 ES 节点端口 9200,如果是伪集群(在一台服务器上搭建集群),须要批改。http.port: 9200
# 设置数据寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.data: /data/module/elasticsearch-7.16.1/es/data/es-node-2/
# 设置日志寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.logs: /data/module/elasticsearch-7.16.1/es/log/es-node-2/
# 发现其余节点主机配置 这里配置的是 ES 所在服务器的公网 IP 地址
discovery.seed_hosts: ["10.0.0.21:9300","10.0.0.22:9300","10.0.0.23:9300"]
# 哪些节点能够被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
Node-3
#node- 3 配置文件
# 集群名称
cluster.name: my-application
# 集群节点名称
node.name: node-3
# ES 默认 只容许本地 127.0.0.1 和[::1] 拜访
# 也能够设置成 0.0.0.0 容许所有 IP 主机拜访
# 如果不配置就默认认为是开发者模式,如果配置不正确会写入正告然而能正确运行
# 如果配置了就会认为进入了生产环境, 如果配置不正确就会降级为异样,ES 无奈正确启动。network.host: 0.0.0.0
# 默认 ES 节点端口 9200,如果是伪集群(在一台服务器上搭建集群),须要批改。http.port: 9200
# 设置数据寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.data: /data/module/elasticsearch-7.16.1/es/data/es-node-3/
# 设置日志寄存门路, 倡议批改这个门路到 ES 的装置文件夹里面, 防止 ES 降级误删掉这个文件夹
path.logs: /data/module/elasticsearch-7.16.1/es/log/es-node-3/
# 发现其余节点主机配置 这里配置的是 ES 所在服务器的公网 IP 地址
discovery.seed_hosts: ["10.0.0.21:9300","10.0.0.22:9300","10.0.0.23:9300"]
# 哪些节点能够被选举为主节点配置
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
须知:如果须要设置近程拜访明码, 那么须要持续增加配置如下
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
给用户赋予权限
Node-1
# 授予执行权限,Module 文件夹权限受权给 es_user 用户
chmod u+x /data/module/elasticsearch-7.16.1/bin
chown -R es_user:es_user /data/module/elasticsearch-7.16.1
# 将 ES 数据存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/data/es-node-1/
chown -R es_user /data/module/elasticsearch-7.16.1/es/data/es-node-1/
# 将 ES 日志存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/log/es-node-1/
chown -R es_user /data/module/elasticsearch-7.16.1/es/log/es-node-1/
Node-2
# 授予执行权限,Module 文件夹权限受权给 es_user 用户
chmod u+x /data/module/elasticsearch-7.16.1/bin
chown -R es_user:es_user /data/module/elasticsearch-7.16.1
# 将 ES 数据存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/data/es-node-2/
chown -R es_user /data/module/elasticsearch-7.16.1/es/data/es-node-2/
# 将 ES 日志存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/log/es-node-2/
chown -R es_user /data/module/elasticsearch-7.16.1/es/log/es-node-2/
Node-3
# 授予执行权限,Module 文件夹权限受权给 es_user 用户
chmod u+x /data/module/elasticsearch-7.16.1/bin
chown -R es_user:es_user /data/module/elasticsearch-7.16.1
# 将 ES 数据存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/data/es-node-3/
chown -R es_user /data/module/elasticsearch-7.16.1/es/data/es-node-3/
# 将 ES 日志存储文件夹权限受权给 es_user 用户
mkdir -p /data/module/elasticsearch-7.16.1/es/log/es-node-3/
chown -R es_user /data/module/elasticsearch-7.16.1/es/log/es-node-3/
elasticsearch 启动
凋谢 9200,9300 端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent;
firewall-cmd --zone=public --add-port=9300/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
切换用户登录
# 切换用户
cd /data/module/elasticsearch-7.16.1
su es_user
# 启动 ES
./bin/elasticsearch
- 第一次启动倡议前台启动, 观测没有谬误后再应用后盾守护线程启动
- 前台启动后, 如果想退出, 能够按键盘 Ctrl+C 进行退出
- 如果须要后盾运行的话,那么减少下启动参数即可:./bin/elasticsearch -d -p pid
- 其中 -d 示意后盾守护过程启动, -p 示意将生成的过程 Id 存储到文件中。
- ES 默认启动会加载 $ES_HOME/config/ 文件夹下 elasticsearch.yml 中的配置
一般来说咱们不间接对外不间接凋谢端口, 而是应用 Nginx 做反向代理来提供服务。
- 首先须要在域名解析 DNS 那里配置 es.xxx.com 指向咱们的服务器
- 配置 Nginx 反向代理
nginx 反向代理 ES 配置
server {
listen 80;
server_name es.xxx.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name es.xxx.com;
ssl_certificate cert/server.pem;
ssl_certificate_key cert/server.key;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://0.0.0.0:9200;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_buffering off; # Required for HTTP-based CLI to work over SSL
# workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
add_header 'X-SSH-Endpoint' 'es.xxxx.com' always;
}
}
Kibana
Kibana 简介
Kibana 是一个旨在与 Elasticsearch 一起应用的开源剖析和可视化平台
Kibana 是一个收费且凋谢的用户界面,可能让您对 Elasticsearch 数据进行可视化,并让咱们在 Elastic Stack 中进行导航。咱们能够进行各种操作,从跟踪查问负载,到了解申请如何流经您的整个利用,都能轻松实现
倡议 Kibana 和 Elasticsearch 装置在同一个服务器上
Kibana 装置
范畴:Master-1,Master-2
创立用户
# 创立 es 用户(ELK 都用自建用户启动)useradd es_user
#批改 es 用户明码
passwd es_user
# 授予执行权限,Module 文件夹权限受权给 es_user 用户
chmod u+x /data/module/kibana-7.16.1-linux-x86_64/bin
chown -R es_user:es_user /data/module/kibana-7.16.1-linux-x86_64
解压装置
cd /data/software/
tar -zxvf kibana-7.16.1-linux-x86_64.tar.gz -C /data/module/
批改配置
cd /data/module/kibana-7.16.1-linux-x86_64/config
vim kibana.yml
Master-1
# Kibana 默认监听端口 5601, 如果须要扭转就批改这个配置
server.port: 5601
# Kibana 部署服务器 IP, 如果是单网卡配置 0.0.0.0 即可, 如果是多网卡须要配置 IP
server.host: 10.0.0.11
# 配置服务器的名称
server.name: my-kibana
# 配置 ES 的集群节点地址
elasticsearch.hosts: ["http://10.0.0.21:9200","http://10.0.0.22:9200","http://10.0.0.23:9200"]
# 创立一个 kibana 索引
kibana.index: ".kibana"
#设置中文
i18n.locale: "zh-CN"
Master-2
# Kibana 默认监听端口 5601, 如果须要扭转就批改这个配置
server.port: 5601
# Kibana 部署服务器 IP, 如果是单网卡配置 0.0.0.0 即可, 如果是多网卡须要配置 IP
server.host: 10.0.0.12
# 配置服务器的名称
server.name: my-kibana
# 配置 ES 的集群节点地址
elasticsearch.hosts: ["http://10.0.0.21:9200","http://10.0.0.22:9200","http://10.0.0.23:9200"]
# 创立一个 kibana 索引
kibana.index: ".kibana"
#设置中文
i18n.locale: "zh-CN"
Kibana 启动
# 开启端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent;
firewall-cmd --zone=public --add-port=9200/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
#进入执行目录
cd /data/module/kibana-7.16.1-linux-x86_64/
su es_user
./bin/kibana
#如果用 root 用户执行,那么须要带上参数:
./bin/kibana --allow-root
#如果想后盾运行 kibana 那么须要带上参数:
nohup ./bin/kibana --alow-root &
拜访 Kibana
启动胜利后, 关上网址:
http://10.0.0.11:5601 |
---|
http://10.0.0.12:5601 |
Logstash
Logstash 简介
Logstash 是一个日志采集框架
其实 Logstash 的作用就是一个数据收集器,将各种格局各种渠道的数据通过它收集解析之后格式化输入到 Elasticsearch,最初再由
Kibana 提供的比拟敌对的 Web 界面进行汇总、剖析、搜寻。
Logstash 装置
范畴:Node-1,Node-2,Node-3
解压装置
cd /data/software/
tar -zxvf logstash-7.16.2-linux-x86_64.tar.gz -C /data/module/
批改配置
cd /data/module/logstash-7.16.2/config/
vim logstash-sample.conf
Node-1
input {
beats {port => 5044}
file {
path => "/data/module/elasticsearch-7.16.1/logs/gc.log"
start_position => "beginning"
}
}
filter {if [path] =~ "access" {mutate { replace => { "type" => "apache_access"} }
grok {match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {hosts => ["10.0.0.21:9200","10.0.0.22:9200"]
}
stdout {codec => rubydebug}
}
Node-2
input {
beats {port => 5044}
file {
path => "/data/module/elasticsearch-7.16.1/logs/gc.log"
start_position => "beginning"
}
}
filter {if [path] =~ "access" {mutate { replace => { "type" => "apache_access"} }
grok {match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {hosts => ["10.0.0.21:9200","10.0.0.22:9200"]
}
stdout {codec => rubydebug}
}
Node-3
input {
beats {port => 5044}
file {
path => "/usr/local/nginx/logs/access.log"
start_position => "beginning"
}
}
filter {if [path] =~ "access" {mutate { replace => { "type" => "apache_access"} }
grok {match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {hosts => ["10.0.0.21:9200","10.0.0.22:9200"]
}
stdout {codec => rubydebug}
}
- 以上配置收集 /usr/local/nginx/logs/access.log 下的日志
- Logstash 默认监听 5044 端口
- 点击查看更多配置用法
赋予权限
Logstash 启动
# 授予执行权限,Module 文件夹权限受权给 es_user 用户
chmod u+x /data/module/logstash-7.16.2/bin
chown -R es_user:es_user /data/module/logstash-7.16.2/
#切换用户
cd /data/module/logstash-7.16.2/
su es_user
#通过 -f 参数能够指定加载哪个配置文件
./bin/logstash -f ./config/logstash-simple.conf
#如果想后盾启动则执行如下命令即可:nohup ./bin/logstash -f ./config/logstash-simple.conf &
FileBeat
FileBeat 介绍
Filebeat 是 Elastic 公司为解决 Logstash“太重”的问题推出的一款轻量级日志采集器。
FileBeat 能够监督指定的日志文件或地位,收集日志事件,并将它们转发到 Elasticsearch 或 Logstash 进行索引。
小提示:
- 因为 logstash 是 jvm 跑的,资源耗费比拟大,所以起初作者又用 golang 写了一个性能较少然而资源耗费也小的轻量级的 logstash-forwarder。
- 不过作者只是一个人,退出 http://elastic.co 公司当前,因为 es 公司自身还收买了另一个开源我的项目 packetbeat,而这个我的项目专门就是用 golang 的,有整个团队,所以 es 公司罗唆把 logstash-forwarder 的开发工作也合并到同一个 golang 团队来搞,于是新的我的项目就叫 filebeat 了。
作者:饶琛琳
链接:https://www.zhihu.com/questio…
起源:知乎 著作权归作者所有。商业转载请分割作者取得受权,非商业转载请注明出处。
FileBeat 工作形式
在解决数量泛滥的服务器、虚拟机和容器生成的日志时可应用 Logstash + Filebeat 的日志采集形式。
如何应用 FileBeat 监控并采集日志,大抵分为如下步骤:
- 在要监督的每个零碎上装置 Filebeat
- 指定日志文件的地位
- 将日志数据解析为字段并将其发送到 Elasticsearch
- 可视化 Kibana 中的日志数据
文件名称 | 形容 |
---|---|
data | 长久化数据文件 |
fields.yml | 配置文件字段类型定义束缚文件 |
filebeat | filebeat 执行命令二进制文件 |
filebeat.reference.yml | 和 filebeat.yml 文件内容一样, 只是 FileBeat 默认配置参考文件, 永远不要批改这个文件 |
filebeat.yml | 配置文件 |
kibana | kibana 可视化 UI |
LICENSE.txt | 开源协定证书, 不须要批改 |
logs | Filebeat 产生的日志文件 |
module | 模块文件夹 |
modules.d | 模块配置文件, 性能开启的模块都是.yml 命名, 所有的禁用模块都是yml.disabled 命名 |
NOTICE.txt | 版本发布公告文件 |
README.md | 应用阐明文件, 不须要批改 |
FileBeat 装置
范畴:Node-1,Node-2,Node-3
解压装置 FileBeat
cd /data/software/
tar -zxvf filebeat-7.16.1-linux-x86_64.tar.gz -C /data/module/
批改 FileBeat 配置
cd /data/module/filebeat-7.16.1-linux-x86_64
vim filebeat.yml
# 增加 kibana 的数据上传地址
host: ["http://10.0.0.11:5601"]
FileBeat 配置次要分为两局部:
- inputs: 从哪里的数据采集数据
-
output: 数据转发到哪里
- 默认 FileBeat 会将日志数据放入到名称为:filebeat-%filebeat 版本号 %-yyyy.MM.dd 的索引中。
- 更多 FileBeat 配置选项见:https://www.elastic.co/guide/…
配置日志收集实现形式
- 形式一:通过启用模块, 批改模块中的配置文件形式实现
比方想监控 nginx 模块, 开启 nginx 模块, 而后在模块的模板配置 nginx.yml 文件中配置日志门路就行了
强烈建议应用这种形式,这种间接提供日志配置模板,简略改下门路即可
启用和配置数据收集模块
Filebeat 模块为常见的开源框架提供了日志收集配置模版。
filebeat 默认反对大多数开源框架的日志收集,比方
ActiveMQ 日志
Apache 日志
ES 日志
IBM MQ 日志
IIS 日志
Kafka 日志
MySQL 日志
RabbitMQ 日志
Redis 日志
Tomcat 日志
…
- 如果想查看 filebeat 反对的模块配置列表,能够输出如下命令
./filebeat modules list
点击查看反对的全副模块列表配置介绍
在装置目录中,启用一个或多个模块。
启用 system,nginx 和 mysql 模块配置
./filebeat modules enable system nginx mysql
这样能够收集 sytem:(操作系统日志),nginx(nginx 日志),mysql(mysql 日志)
执行胜利后显示如下所示
禁用某个模块,则输出反向的命令即可
./filebeat modules disable system nginx mysql
执行下面的命令后就会发现./modules.d 文件夹下的 nginx.yml.disabled 文件重命名成了 ningx.yml
- 进入 modules.d,咱们须要批改下模块的配置文件来收集咱们指定地位的日志文件。
cd modules.d
比方咱们心愿采集 nginx 的 /usr/local/nginx/logs/access.log 日志和 /usr/local/nginx/logs/error.log 日志
那么输出关上 nginx.yml 文件命令如下:
vi nginx.yml
- module: nginx
# Access logs
access:
enabled: true
var.paths: ["/usr/local/nginx/logs/access.log"]
error:
enabled: true
var.paths: ["/usr/local/nginx/logs/error.log"]
ingress_controller:
enabled: false
如果 nginx.yml 配置文件出错就会报错如下:
range can’t iterate over /usr/local/nginx/logs/access.log
2021-04-25T16:42:59.347+0800 ERROR [reload] cfgfile/list.go:99 Error
creating runner from config: could not create module registry for filesets: error getting config for fileset nginx/access:
Error interpreting the template of the input: template: text:3:22: executing "text" at <.paths>:
range can't iterate over /usr/local/nginx/logs/access.log
- 形式二: 通过自定义监控文件门路事项
手动配置 Filebeat 监控日志文件地位
手动配置指定日志收集起源
要手动配置 Filebeat(而不是应用 模块),请在的 filebeat.inputs 局部中指定输出列表 filebeat.yml。
- 输出指定 Filebeat 如何查找和解决输出数据
- 该列表是一个 YAML 数组,因而每个输出都以破折号(-)结尾。您能够指定多个输出,并且能够屡次指定雷同的输出类型。
filebeat.yml 文件增加配置示例如下:
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/*.log
- 本示例中的输出 /var/log/.log 将播种门路中的所有文件,这意味着 Filebeat 将收集 /var/log/ 目录中以.log 结尾的所有文件
- 要从预约义级别的子目录中提取所有文件,请应用以下模式:/var/log//.log。这.log 将从的子文件夹中提取所有文件 /var/log。
- 它不会从 /var/log 文件夹自身获取日志文件。以后,不可能以递归形式获取目录所有子目录中的所有文件。
Filebeat 配置检测
./filebeat test config -e -c ./filebeat.yml
阐明:
- 如果配置文件不在默认门路下,也能够通过 -c 命令指定加载配置文件的门路
- 执行胜利后能够看到 Config OK
FileBeat 启动
首次启动
./filebeat setup -e -c ./filebeat.yml
往后启动
./filebeat -e -c ./filebeat.yml
-e 是可选的,并将输入发送到规范谬误,而不是配置的日志输入。
后盾启动
nohup ./filebeat -e -c ./filebeat.yml -d "Publish" & > nohup.out
root 启动
如果以 root 用户身份运行 Filebeat,就须要更改配置文件的所有权以及 modules.d 目录中启用的所有配置,或者应用 –strict.perms=false 指定的名称运行 Filebeat
sudo chown root filebeat.yml
sudo chown root modules.d/system.yml
配置文件所有权和权限
进行 filebeat
# 查看过程号 PID
ps aux | grep filebeat
#完结过程
kill -9 20976
Zookeeper
范畴:Node-1,Node-2,Node-3
装置筹备
集群解析
IP | 主机名 |
---|---|
10.0.0.21 | node-1 |
10.0.0.22 | node-2 |
10.0.0.23 | node-3 |
# 集群解析:有多少台解析多少
vim /etc/hosts
10.0.0.21 node-1
10.0.0.22 node-2
10.0.0.23 node-3
操作流程
上传 Zookeeper
解压 Zookeeper
cd /elk/
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
配置 Zookeeper
cd apache-zookeeper-3.7.0-bin/
cd conf/
#zoo.cfg 是 ZK 默认读取的配置文件,所以先复制一份示例文件做批改
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
node-1
# 集群节点间心跳查看距离,单位是毫秒,后续所有和工夫相干的配置都是该值的倍数,进行整数倍的配置,如 4 等于 8000
tickTime=2000
#集群其余节点与 Master 通信实现的初始通信工夫限度,这里代表 10*2000
initLimit=10
#若 Master 节点在超过 syncLimit*tickTime 的工夫还未收到响应,认为该节点宕机
syncLimit=5
#数据寄存目录
dataDir=/elk/apache-zookeeper-3.7.0-bin/zkData
#ZK 日志文件寄存门路
dataLogDir=/data/zkdata/logs
#ZK 服务端口
clientPort=2181
#单个客户端最大连接数限度,0 代表不限度
maxClientCnxns=60
#快照文件保留的数量
autopurge.snapRetainCount=3
#清理快照文件和事务日志文件的频率,默认为 0 代表不开启,单位是小时
autopurge.purgeInterval=1
#server.A=B:C:D 集群设置,#A 示意第几号服务器;#B 是 IP;
#C 是该服务器与 leader 通信端口;#D 是 leader 挂掉后从新选举所用通信端口;两个端口号能够随便
server.1=node-1:2888:3888
server.2=node-2:2888:3888
server.3=node-3:2888:3888
node-2
# 集群节点间心跳查看距离,单位是毫秒,后续所有和工夫相干的配置都是该值的倍数,进行整数倍的配置,如 4 等于 8000
tickTime=2000
#集群其余节点与 Master 通信实现的初始通信工夫限度,这里代表 10*2000
initLimit=10
#若 Master 节点在超过 syncLimit*tickTime 的工夫还未收到响应,认为该节点宕机
syncLimit=5
#数据寄存目录
dataDir=/elk/apache-zookeeper-3.7.0-bin/zkData
#ZK 日志文件寄存门路
dataLogDir=/data/zkdata/logs
#ZK 服务端口
clientPort=2181
#单个客户端最大连接数限度,0 代表不限度
maxClientCnxns=60
#快照文件保留的数量
autopurge.snapRetainCount=3
#清理快照文件和事务日志文件的频率,默认为 0 代表不开启,单位是小时
autopurge.purgeInterval=1
#server.A=B:C:D 集群设置,#A 示意第几号服务器;#B 是 IP;
#C 是该服务器与 leader 通信端口;#D 是 leader 挂掉后从新选举所用通信端口;两个端口号能够随便
server.1=node-1:2888:3888
server.2=node-2:2888:3888
server.3=node-3:2888:3888
node-3
# 集群节点间心跳查看距离,单位是毫秒,后续所有和工夫相干的配置都是该值的倍数,进行整数倍的配置,如 4 等于 8000
tickTime=2000
#集群其余节点与 Master 通信实现的初始通信工夫限度,这里代表 10*2000
initLimit=10
# 若 Master 节点在超过 syncLimit*tickTime 的工夫还未收到响应,认为该节点宕机
syncLimit=5
#数据寄存目录
dataDir=/elk/apache-zookeeper-3.7.0-bin/zkData
#ZK 日志文件寄存门路
dataLogDir=/data/zkdata/logs
#ZK 服务端口
clientPort=2181
#单个客户端最大连接数限度,0 代表不限度
maxClientCnxns=60
#快照文件保留的数量
autopurge.snapRetainCount=3
#清理快照文件和事务日志文件的频率,默认为 0 代表不开启,单位是小时
autopurge.purgeInterval=1
#server.A=B:C:D 集群设置,#A 示意第几号服务器;#B 是 IP;
#C 是该服务器与 leader 通信端口;#D 是 leader 挂掉后从新选举所用通信端口;两个端口号能够随便
server.1=node-1:2888:3888
server.2=node-2:2888:3888
server.3=node-3:2888:3888
配置数据日志目录 myid
Zookeeper 节点都须要执行,创立数据目录、日志目录以及 myid
# 创立数据目录
mkdir -p /elk/apache-zookeeper-3.7.0-bin/zkData
#创立日志目录
mkdir -p /elk/apache-zookeeper-3.7.0-bin/zKData/logs
#创立 PID(node- 1 输出的 myid 为 1,node- 2 的 myid 为 2 以此类推)vim /elk/apache-zookeeper-3.7.0-bin/zKData/myid
启动 Zookeeper
# 进入 bin 目录
cd /elk/apache-zookeeper-3.7.0-bin/bin
#启动与监测,查看选举状况
./zkServer.sh start
./zkServer.sh status
Kafka
Kafka 介绍
Kafka 是 Apache 开发的一款分布式消息中间件。消息中间件的呈现让生产者和消费者不间接进行通信,升高了传统音讯传输模式下的耦合性。通过 N 个生产者进行生产并将数据放在音讯队列中,再由后端 N 个消费者进行解决,解决了生产速度和生产速度不匹配的问题,还能够防止生产者或者消费者任意一方呈现问题时产生数据失落的状况。
如果音讯队列满了能够思考对音讯队列服务进行扩容。为了防止 Kafka 数据失落或者数据反复带来的数据不一致性问题,须要服务端、客户端都做好相应配置以及采取一些弥补计划:
- 生产端:要求不能少生产音讯。比方应用带回调办法的 API 来确认音讯发 送是否胜利、生产音讯有重试机制等
- 服务端:要求不能失落音讯。比方对正本做好相干配置
-
生产端:要求不能少生产音讯
音讯零碎
点对点音讯零碎:
生产者发送一条音讯到 queue,一个 queue 能够有很多消费者,然而一个音讯只能被一个消费者承受,当没有消费者可用时,这个音讯会被保留直到有 一个可用的消费者,所以 Queue 实现了一个牢靠的负载平衡。
公布订阅音讯零碎:
发布者发送到 topic 的音讯,只有订阅了 topic 的订阅者才会收到音讯。topic 实现了公布和订阅,当你公布一个音讯,所有订阅这个 topic 的服务都能失去这个音讯,所以从 1 到 N 个订阅者都能失去这个音讯的拷贝。
Kafka 术语
音讯由 producer 产生,音讯依照 topic 归类,并发送到 broker 中,broker 中保留了一个或多个 topic 的音讯,consumer 通过订阅一组 topic 的音讯,通过继续的 poll 操作从 broker 获取音讯,并进行后续的音讯解决。
- Producer:音讯生产者,就是向 broker 发指定 topic 音讯的客户端。
- Consumer:音讯消费者,通过订阅一组 topic 的音讯,从 broker 读取音讯的客户端。
- Broker:一个 kafka 集群蕴含一个或多个服务器,一台 kafka 服务器就是一个 broker,用于保留 producer 发送的音讯。一个 broker 能够包容多个 topic。
- Topic:每条发送到 broker 的音讯都有一个类别,能够了解为一个队列或者数据库的一张表。
- Partition:一个 topic 的音讯由多个 partition 队列存储的,一个 partition 队列在 kafka 上称为一个分区。每个 partition 是一个有序的队列,多个 partition 间则是无序的。partition 中的每条音讯都会被调配一个有序的 id(offset)。
- Offset:偏移量。kafka 为每条在分区的音讯保留一个偏移量 offset,这也是消费者在分区的地位。kafka 的存储文件都是依照 offset.kafka 来命名,位于 2049 地位的即为 2048.kafka 的文件。比方一个偏移量是 5 的消费者,示意曾经生产了从 0 - 4 偏移量的音讯,下一个要生产的音讯的偏移量是 5。
- Consumer Group(CG):若干个 Consumer 组成的汇合。这是 kafka 用来实现一个 topic 音讯的播送(发给所有的 consumer)和单播(发给任意一个 consumer)的伎俩。一个 topic 能够有多个 CG。topic 的音讯会复制(不是真的复制,是概念上的)到所有的 CG,但每个 CG 只会把音讯发给该 CG 中的一个 consumer。如果须要实现播送,只有每个 consumer 有一个独立的 CG 就能够了。要实现单播只有所有的 consumer 在同一个 CG。用 CG 还能够将 consumer 进行自在的分组而不须要屡次发送音讯到不同的 topic。
如果一个消费者组有两个消费者,订阅了一个具备 4 个分区的 topic 的音讯,那么这个消费者组的每一个消费者都会生产两个分区的音讯。消费者组的成员是动静保护的,如果新增或者缩小了消费者组中的消费者,那么每个消费者生产的分区的音讯也会动态变化。比方原来一个消费者组有两个消费者,其中一个消费者因为故障而不能持续生产音讯了,那么剩下一个消费者将会生产全副 4 个分区的音讯。
kafka 装置
范畴:Master-2,Node-1,Node-2
运行图解
一次写入,反对多个利用读取,读取信息是雷同的
上传 Kafka
解压 Kafka
cd /elk/
tar -zxvf kafka-3.0.0-src.tgz
配置 Kafka
cd /elk/kafka-3.0.0-src/config/
vim server.properties
node-1
# 集群中每个节点 ID 不能雷同
broker.id=1
#Kafka 音讯寄存门路,并不是日志,kafka 的日志会主动生成到其它目录中
log.dirs=/data/kafka/log
#zk 服务地址与端口
zookeeper.connect=10.0.0.11:2181,10.0.0.12:2181,10.0.0.13:2181
#kafka 监听端口
listeners=PLAINTEST://10.0.0.11:9092
#优化配置
#日志从内存刷到磁盘的阈值,达到这个数量就落盘,通常要缩小落盘的频率
log.flush.interval.message=10000
#日志落盘后保留多少小时,超时则删除,即使没有生产,防止磁盘写满
log.retention.hours=168
#单个日志的大小,超出则创立新的日志,删掉旧的日志
log.segment.bytes=1073741824
#检测日志是否达到删除条件的周期 #通常只须要批改 server.properties 这个文件,尽管还 > 有生产者、消费者的属性文件,然而个别都 > 是由程序去管制
log.retention.check.interval.ms=300000
node-2
# 集群中每个节点 ID 不能雷同
broker.id=2
#Kafka 音讯寄存门路,并不是日志,kafka 的日志会主动生成到其它目录中
log.dirs=/data/kafka/log
#zk 服务地址与端口
zookeeper.connect=10.0.0.11:2181,10.0.0.12:2181,10.0.0.13:2181
#kafka 监听端口
listeners=PLAINTEST://10.0.0.12:9092
#优化配置
#日志从内存刷到磁盘的阈值,达到这个数量就落盘,通常要缩小落盘的频率
log.flush.interval.message=10000
#日志落盘后保留多少小时,超时则删除,即使没有生产,防止磁盘写满
log.retention.hours=168
#单个日志的大小,超出则创立新的日志,删掉旧的日志
log.segment.bytes=1073741824
#检测日志是否达到删除条件的周期 #通常只须要批改 server.properties 这个文件,尽管还 > 有生产者、消费者的属性文件,然而个别都 > 是由程序去管制
log.retention.check.interval.ms=300000
node-3
# 集群中每个节点 ID 不能雷同
broker.id=3
#Kafka 音讯寄存门路,并不是日志,kafka 的日志会主动生成到其它目录中
log.dirs=/data/kafka/log
#zk 服务地址与端口
zookeeper.connect=10.0.0.11:2181,10.0.0.12:2181,10.0.0.13:2181
#kafka 监听端口
listeners=PLAINTEST://10.0.0.13:9092
#优化配置
#日志从内存刷到磁盘的阈值,达到这个数量就落盘,通常要缩小落盘的频率
log.flush.interval.message=10000
#日志落盘后保留多少小时,超时则删除,即使没有生产,防止磁盘写满
log.retention.hours=168
#单个日志的大小,超出则创立新的日志,删掉旧的日志
log.segment.bytes=1073741824
#检测日志是否达到删除条件的周期 #通常只须要批改 server.properties 这个文件,尽管还 > 有生产者、消费者的属性文件,然而个别都 > 是由程序去管制
log.retention.check.interval.ms=300000
启动 Kafka
# 应用 kafka-server-start.sh 脚本挂后盾启动
nohup /elk/kafka-3.0.0-src/bin/kafka-server-start.sh /elk/kafka-3.0.0-src/config/server.properties &
#另一种后盾启动形式
bin/kafka-server-start.sh -daemon config/server.properties
kafka 发送音讯与生产信息
应用 Kafka
应用 kafka-topics.sh 脚本实现 topic 的创立、查看与删除,因为 topic 名称抵触限度,topic 名称不能同时蕴含. 下划线_
# 创立 topic, 如果 ZK 是集群的话,轻易写一个地址都能够
/elk/kafka-3.0.0-src/bin/kafka-topics.sh --create --bootstrap-server 10.0.0.11:9092 --replication-factor 1 --partitions 1 --topic test_topic
#--zookeeper;
#--replication-factor:topic 的总正本数,1 代表主备节点总共只有一个正本,相当于没有备份,所以通常 3 节点的话设置为 2
#--partitions:topic 分区的数量,通常和节点数保持一致
#--topic:队列名字
#查看 topic
/elk/kafka-3.0.0-src/bin/kafka-topics.sh --list --bootstrap-server 10.0.0.11:9092
#查看 topic 详细信息,蕴含分区、正本与 Leader 状况
kafka-topics.sh --describe --topic test --zookeeper 10.0.0.11:2181
#删除 topic
kafka-topics.sh --zookeeper 10.0.0.11:2181,10.0.0.12:2181,10.0.0.13:2181 --delete --topic test_topic
在 2 个终端下别离应用上面的脚本模仿数据生产与生产过程
# 在 hello 这个队列中开始生产数据
kafka-console-producer.sh --broker-list localhost:9092 --topic hello
#从队列头部开始生产数据
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello --from-beginning
登录 Zookeeper 验证,任意一台 ZK 节点应该都能够看到 topic 的信息。不过这里看到的只是信息而已,数据其实还是在 Kfaka 中。先看看 ZK 中的数据是怎么样的:
在 Kfaka 配置文件中 log.dirs 所指定的目录中,寄存了 topic 数据目录,在创立 topic 时配置了几个分区就会生成几份目录(如果创立 topic 时 –partitions 设定的是 1,而 Kfaka 又有 5 个集群的话,那数据只会在一个节点上看到,ZK 这个时候就施展出作用了,它能告知用户数据在哪台上)。每个目录中的.log 文件保留有队列中的音讯,生产者生产的音讯都会追加到 log 文件的尾部。而.index 文件则记录了数据偏移量,依据这个疾速查问到 log 中的数据。
扩容 kafka
首先要明确扩容的话意味着须要减少 Kafka 节点,所以第一件事就是在新节点上部署好 Kafka,配置要和之前节点统一
登录 ZK 节点而后查看 ids 信息,如果发现新节点代表 Kafka 扩容是胜利的
Prometheus
基于 docker 搭建 Prometheus+Grafana
Prometheus 简介
起源背景
Prometheus(普罗米修斯)是一套开源的 监控 & 报警 & 工夫序列数据库 的组合,由 SoundCloud 公司开发的。
技术原理
通过 HTTP 协定周期性抓取 被监控组件的状态,益处是只需 HTTP 即可监控,非常适合虚拟化环境,比方 VM 或者 Docker。
Prometheus 应该是为数不多的适宜 Docker、Mesos、Kubernetes 环境的监控零碎之一。
输入被监控组件信息的 HTTP 接口被叫做 exporter。
目前互联网公司罕用的组件大部分都有 exporter 能够间接应用,比方 Varnish、Haproxy、Nginx、MySQL、Linux 零碎信息 (包含磁盘、内存、CPU、网络等等),具体反对的源看:https://github.com/prometheus
次要特点
Prometheus 的次要特点
一个多维数据模型(工夫序列由指标名称定义和设置键 / 值尺寸) |
---|
高效存储,均匀一个采样数据占~3.5bytes 左右,320 万的工夫序列,每 30 秒采样,放弃 60 天,耗费磁盘大略 228G |
一种灵便的查询语言 |
不依赖分布式存储,单个服务器节点 |
工夫汇合通过 HTTP 上的 PULL 模型进行 |
通过两头网关反对推送工夫 |
通过服务发现或动态配置发现指标 |
多种模式的图形和仪表板反对 |
整体架构
Prometheus 及其生态系统组件的整体架构:
生态组件
Prometheus daemon | 责定时去指标上抓取 metrics(指标) 数据,每个抓取指标须要裸露一个 http 服务的接口给它定时抓取 |
---|---|
Prometheus | 反对通过配置文件、文本文件 |
Alertmanager | 独立于 Prometheus 的一个组件,能够反对 Prometheus 的查问语句,提供非常灵便的报警形式。 |
PushGateway | 反对 Client 被动推送 |
数据模型
Prometheus 所有的存储由按工夫序列实现
雷同的metrics(指标名称) +label(一个或多个标签) = 一条工夫序列,
不同的 label 示意不同的工夫序列。
metrics(指标名称):自定义命名的监测对像
label(一个或多个标签:对一条工夫序列不同维度的辨认
数据类型
- Counter:用于累计值
如:记录申请次数、工作实现数、谬误产生次数。始终减少,不会缩小。重启过程后,会被重置。
例如:
http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10 秒后抓取 http_response_total{method=”GET”,endpoint=”/api/tracks”} 100
- Gauge:惯例数值
如:温度变动、内存应用变动。可变大,可变小。重启过程后,会被重置
例如:
memory_usage_bytes{host=”master-01″} 100 < 抓取值、
memory_usage_bytes{host=”master-01″} 30、
memory_usage_bytes{host=”master-01″} 50、
memory_usage_bytes{host=”master-01″} 80 < 抓取值。
- Histogram:柱状图,用于跟踪事件产生的规模
如:申请耗时、响应大小。它特别之处是能够对记录的内容进行分组,提供 count 和 sum 全副值的性能。
例如:{小于 10= 5 次,小于 20= 1 次,小于 30= 2 次},count= 7 次,sum= 7 次的求和值。
- Summary:用于跟踪事件产生的规模
如:申请耗时、响应大小。同样提供 count 和 sum 全副值的性能。
例如:count= 7 次,sum= 7 次的值求值。
它提供一个 quantiles 的性能,能够按 % 比划分跟踪的后果。例如:quantile 取值 0.95,示意取采样值外面的 95% 数据。
Prometheus 装置
范畴:Master-1
服务器 IP | 主机名 | 软件列表 |
---|---|---|
10.0.0.11 | Master-1 | Prometheus+grafana,node_exporter |
10.0.0.12 | Master-2 | node_exporter |
10.0.0.21 | Node-1 | node_exporter |
10.0.0.22 | Node-2 | node_exporter |
10.0.0.23 | Node-3 | node_exporter |
装置 Prometheus(docker 版)
- node_exporter – 用于机器零碎数据收集
- Prometheus – 用于监控机器
装置 docker
#yum 包更新到最新
sudo yum update -y
#装置须要的软件包,yum-util 提供 yum-config-manager 性能,另外两个是 devicemapper 驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置 yum 源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#装置 docker 后查看
sudo yum install docker-ce -y;
docker -v;
#配置镜像减速
mkdir -p /etc/docker;
cd /etc/docker;
vi daemon.json;
Docker 官网和国内很多云服务商都提供了国内加速器服务,例如:
- 网易:https://hub-mirror.c.163.com
- 七牛云加速器(举荐):https://reg-mirror.qiniu.com
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
# 重新启动服务
systemctl daemon-reload;
systemctl restart docker;
#查看减速是否失效
docker info;
#启动 docker
systemctl start docker
#查看 docker 状态
systemctl status docker
#开机启动
systemctl enable docker
#重启检测开机自启
reboot
拉取镜像
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
docker pull google/cadvisor
启动 node-exporter
(须要被监测的机器都须要装置)
docker run -d -p 9100:9100 \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
-v "/etc/localtime:/etc/localtime" \
--net=host \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
开启端口
firewall-cmd --zone=public --add-port=9100/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
#看到 9100 端口的服务即可
netstat -anpt;
#开机自启动 docker update --restart=always 容器 ID
docker update --restart=always cadvisor
查看 node-exporter
# 浏览器查看
http://10.0.0.11:9100/metrics
装置 cAdvisor
监控 Docker 容器
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=9200:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
开启端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
#看到 9200 端口的服务即可
netstat -anpt;
#开机自启动 docker update --restart=always 容器 ID
docker update --restart=always eager_nobel
# 浏览器拜访
http://10.0.0.11:9200
启动 prometheus
(仅监测主机 -Master-1)
mkdir -p /data/module/prometheus
cd /data/module/prometheus/
vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9000"]
Prometheus 启动
创立容器
docker run -d -p 9000:9090 -v /data/module/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
开启端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
#看到 9000 端口的服务即可
netstat -anpt;
#开机自启动 docker update --restart=always 容器 ID
docker update --restart=always dcdf7614cb00
查看 Prometheus
# 浏览器查看
http://10.0.0.11:9000/graph
Grafana
Grafana 简介
Grafana 装置
范畴:Master-1
# 创立数据目录
mkdir -p /data/module/grafana-storage
#赋予权限,因为 grafana 用户会在这个目录写入文件,777 比较简单粗犷!chmod 777 -R /data//module/grafana-storage/
Grafana 启动
docker run -d \
-p 9300:3000 \
--name=grafana \
-v /data/module/grafana-storage:/var/lib/grafana \
grafana/grafana
开启端口
firewall-cmd --zone=public --add-port=9300/tcp --permanent;
firewall-cmd --zone=public --add-service=http --permanent;
firewall-cmd --zone=public --add-service=https --permanent;
firewall-cmd --reload;
firewall-cmd --list-all;
#看到 9300 端口的服务即可
netstat -anpt;
拜访 Grafana
# 浏览器查看
http://10.0.0.11:9300/
默认账号密码都是 admin
登陆后会强制批改明码