ELK+kafka+filebeat+Prometheus+Grafana

ELK+Kafka+FileBeat高可用集群

环境准备

ELK 是Elasticsearch ,Logstash, Kibana 的简称缩写,主要专注于可视化日志分析和查询

Elastic Stack 主要包括三大部分:

海量数据存储和检索----- Elasticsearch 分布式存储和查询
可视化界面和图表生成----Kibana 可提供可视化界面和各种图表的生成。
可视化界面和图表生成----Kibana 可提供可视化界面和各种图表的生成。

ELK 不过是Elastic Stack 用法中日志分析栈的一部分

ELK+kafka+filebeat+Prometheus+Grafana_第1张图片

说明

  • 不知道你们有没有注意到,官网似乎已经有意在使用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

ELK+kafka+filebeat+Prometheus+Grafana_第2张图片

软件使用版本

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

机器的配置都是

ELK+kafka+filebeat+Prometheus+Grafana_第3张图片

修改进程

在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 个文档并不困难。但如果面对的是十亿行日志,又该如何解读呢?

    ELK+kafka+filebeat+Prometheus+Grafana_第4张图片

    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 界面进行汇总、分析、搜索。ELK+kafka+filebeat+Prometheus+Grafana_第5张图片

Logstash安装

范围Node-1,Node-2Node-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 }
}
赋予权限
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工作方式

ELK+kafka+filebeat+Prometheus+Grafana_第6张图片

在处理数量众多的服务器、虚拟机和容器生成的日志时可使用 Logstash + Filebeat 的日志采集方式。

ELK+kafka+filebeat+Prometheus+Grafana_第7张图片

如何使用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-2Node-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: 数据转发到哪里

    ELK+kafka+filebeat+Prometheus+Grafana_第8张图片

  • 默认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 命令指定加载配置文件的路径

ELK+kafka+filebeat+Prometheus+Grafana_第9张图片

  • 执行成功后可以看到 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-2Node-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来确认消息发 送是否成功、生产消息有重试机制等
  • 服务端:要求不能丢失消息。比如对副本做好相关配置
  • 消费端:要求不能少消费消息

    ELK+kafka+filebeat+Prometheus+Grafana_第10张图片

消息系统

ELK+kafka+filebeat+Prometheus+Grafana_第11张图片

点对点消息系统

​ 生产者发送一条消息到queue,一个queue可以有很多消费者,但是一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到有 一个可用的消费者,所以Queue实现了一个可靠的负载均衡。

发布订阅消息系统

​ 发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到这个消息的拷贝。

Kafka术语

ELK+kafka+filebeat+Prometheus+Grafana_第12张图片

​ 消息由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

运行图解

ELK+kafka+filebeat+Prometheus+Grafana_第13张图片

ELK+kafka+filebeat+Prometheus+Grafana_第14张图片

一次写入,支持多个应用读取,读取信息是相同的

ELK+kafka+filebeat+Prometheus+Grafana_第15张图片

上传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及其生态系统组件的整体架构

ELK+kafka+filebeat+Prometheus+Grafana_第16张图片 生态组件
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 官方和国内很多云服务商都提供了国内加速器服务,例如:

{
"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=` 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

登陆后会强制修改密码

你可能感兴趣的:(ELK)