设置宿主机可访问桥接的虚拟机
在虚拟机[CentOS 8]上进行如下操作
$ systemctl stop firewalld.service # 关闭虚拟机防火墙,需要root权限
$ ifconfig # 查看虚拟机ip地址
$ nohup ./node_exporter & # 启动各种应用,例:node_exporter
$ netstat -tln # 查看监听端口
此后可在宿主机上通过 http://虚拟机IP:9100/metrics 访问部署在虚拟机上的node_exporter的数据。
其他服务类似。
Q:IP地址从哪里查看?
A:
【CentOS】IP地址可通过
ifconfig
命令获取,如命令不存在,请通过yum install net-tools.x86_64
安装该命令;【Windows】IP地址通过
ipconfig
命令获取。
通过WinSCP软件管理虚拟机上的文件
下载:https://winscp.net/download/WinSCP-5.17.6-Setup.exe
输入虚拟机的IP地址,22端口,填写root用户及密码,保存并登录,通过拖拽文件实现传输;
此外,WinSCP还可管理CentOS上的文件,包括复制、移动、删除、重命名、编辑,都可。
Prometheus 2.3.0
# 通过WinSCP传输prometheus-2.3.0.linux-amd64.tar.gz到Centos 8虚拟机的 /usr/local 目录下
> tar -xzvf prometheus-2.3.0.linux-amd64.tar.gz --remove-files # 解压文件
-z 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-j 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v 显示指令执行过程, 显示操作过程
-f 指定压缩包的名字
-x 解打包
-c 打包
-C 指定解打包的目录(大写)
--remove-files 归档/压缩之后删除源文件
把Prometheus设置为service,且开机启动
$ vi /etc/systemd/system/prometheus.service # 配置服务文件,输入以下内容
[Unit]
Description=Prometheus
After=network.target
[Service]
ExecStart=/../prometheus-2.3.0.linux-amd64/promethus --connfig.file=/../prometheus-2.3.0.linux-amd64/promethus.yml
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload # 重新加载配置文件
$ systemctl enable prometheus # 设置prometheus开机启动
$ systemctl start prometheus # 启动prometheus
$ systemctl status proemtheus # 查看服务状态是否为active,以及查看日志
Prometheus Exporter
安装Node_exporter 1.0.1
# 通过WinSCP传输node_exporter-1.0.1.linux-amd64.tar.gz到Centos 8虚拟机的 /home/mqtt 目录下
> tar -xzvf node_exporter-1.0.1.linux-amd64.tar.gz # 解压文件
> cp -rf node_exporter-1.0.1.linux-amd64 /usr/local/prometheus/node_exporter-1.0.1.linux-amd64 # 把解压后的文件复制到/usr/local/prometheus/node_exporter-1.0.1.linux-amd64
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
把node exporter设置为service,且开机启动
$ vi /etc/systemd/system/node_exporter.service # 配置服务文件,输入以下内容
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/usr/local/prometheus/node_exporter-1.0.1.linux-amd64/node_exporter
[Install]
WantedBy=multi-user.target
$ systemctl daemon-reload # 重新加载配置文件
$ systemctl enable node_exporter # 设置node_exporter开机启动
$ systemctl start node_exporter # 启动node_exporter
$ systemctl status node_exporter # 查看服务状态是否为active
主要exporter展示
Name | Description | 主要metrics/功能 |
---|---|---|
Node exporter | 提供主机、系统性能数据 | CPU使用率、内存使用率、硬盘使用率、网络带宽使用量、磁盘I\O、每小时网络流量等 |
cAdvisor | docker监控 | 由谷歌开发,cAdvisor(Container Advisor)让容器用户了解其运行容器的资源使用情况和性能特征。它是一个守护进程,收集、聚合、处理和导出有关正在运行的容器的信息。对于每个容器,cAdvisor保存了资源隔离参数、历史资源使用情况和网络统计信息。 |
RabbitMQ exporter | 消息队列RabbitMQ监控 | 统计RabbitMQ中channel、connection、consumer、message、exchange的数量,统计处于各种状态的message的数量,统计connection的收发量,统计RabbitMQ node主机的运行时间、内存、磁盘等的主要数据。 |
kube-state-metrics | 提供Kubernetes集群的多维度数据 | 它不关注Kubernetes组件的健康状况,而是关注集群内部各种对象的健康状况,比如deployments, nodes和pods。kube-state-metrics的数据直接从kubernetes API生成。 |
Blackbox exporter | 通过HTTP、HTTPS、DNS、TCP、ICMP协议从主机向其他主机发起请求,作黑盒探测 | 从内网ping(ICMP)服务器以检测服务器存活状态、http检测http服务是否存活、进行SSL证书(HTTPS)有效期预警等。 |
Aliyun exporter | 监控多个阿里云服务器的数据 | Adhoc TopN 查询: 比如”找到当前对公网带宽消耗最大的 10 台服务器”; 容量规划: 比如”分析过去一个月某类型服务的资源用量”; 高级报警: 比如”对比过去一周的metrics值, 根据标准差进行报警”; 整合业务监控 |
Kafka exporter | 监控Kafka的broker数量、topics、consumer groups的多项数据 | kafka_brokers :broker的数量;kafka_topic_partitions :某个topic的partition(分区)数量;kafka_topic_partition_leader :某个topic的leader broker ID;kafka_topic_partition_replicas :topic的replication备份数量;kafka_consumergroup_lag :消息分发的延迟。————Kafka exporter所给出的全部metrics不多。 |
Windows exporter | 监控windows系统 | 同node exporter相似,统计CPU、内存、服务进程状态、TCP、Users等指标 |
Redis exporter | 监控Redis数据库 | ·暂缺· |
Elasticsearch exporter | 监控elasticsearch数据分析系统 | 对elasticsearch集群的节点、分片、文件系统、索引等进行数量上的统计,比如集群健康状态、节点数量、出错(tripped)的节点数量、健康活动的分片数量、文件系统使用率、I/O统计等,此外,还对elasticsearch这个进程以及它的java虚拟机内部各项指标进行监控,比如它进程的CPU占用、内存占用、线程池各项指标、对JVM内存池和GC机制的统计。 |
Mqtt blackbox exporter | 监测mqtt通信往返是否通畅的exporter | probe_mqtt_completed_total :总探测完成次数;probe_mqtt_duration_seconds :探测消息往返的时间消耗;probe_mqtt_messages_published_total :消息发出总量probe_mqtt_messages_received_total :收到消息总量probe_mqtt_started_total :已经开始的探测数量 |
Kibana exporter | 监控Kibana可视化工具的exporter | kibana_status :Kibana的状态 -有三个健康状态 Green (1), Yellow (0.5) or Red (0).kibana_millis_uptime :已运行时间,以毫秒记。kibana_heap_* :堆内存使用情况相关;kibana_requests_* :发送请求数量,失联请求数量;kibana_plugin_elasticsearch :插件elasticsearch的健康状态,1为健康;kibana_plugin_logstash :插件logstash的健康状态,1为健康;kibana_concurrent_connections :连接到kibana的连接数;kibana_response_* :kibana做出响应的时间,最大值和平均值; |
Grafana 7.0.4-1
安装Grafana
# 通过WinSCP传输grafana-7.0.4-1.x86_64.rpm到Centos 8虚拟机的 /home/mqtt 目录下
> yum install grafana-7.0.4-1.x86_64.rpm # 安装Grafana
# 通过WinSCP传输grafana-image-renderer.zip到Centos 8虚拟机的 /home/mqtt 目录下
> unzip -o -d /var/lib/grafana/plugins grafana-image-renderer.zip # 解压grafana-image-renderer[负责告警截图的插件]
-l 显示压缩文件内所包含的文件
-v 执行时显示详细的信息
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-n 解压缩时不要覆盖原有的文件
-o 不必先询问用户,unzip执行后覆盖原有文件。
-d <目录> 指定文件解压缩后所要存储的目录。
> mv /var/lib/grafana/plugins/grafana-image-renderer/plugin-linux-x64-glibc grafana-image-renderer # 重命名文件夹plugin-linux-x64-glibc为grafana-image-renderer,grafana才能识别
> systemctl start grafana-server # 启动grafana
> systemctl enable grafana-server.service # 设置grafana开机启动
> systemctl status grafana-server # 查看grafana服务状态
Grafana插件所在目录:/var/lib/grafana/plugins
Grafana Kafka REST Proxy Alerting 方式的实现
$ yum install java-1.8.0-openjdk-devel # 安装JDK8
# 通过WinSCP传输confluent-5.5.1-2.12.tar.gz到Centos 8虚拟机的/home/mqtt目录下
$ tar -zxvf confluent-5.5.1-2.12.tar.gz # 安装Confluent
# 安装confluent CLI (Command Line Interface)
# 通过WinSCP传输confluent_latest_linux_amd64.tar.gz到Centos 8虚拟机的/home/wang目录下
$ mkdir -v confluentCLI
$ tar -zxvf confluent_latest_linux_amd64.tar.gz -C ~/confluentCLI
$ vi /etc/profile #
export CONFLUENT_HOME=~/confluent/confluent-5.5.1
$ logout # 重新注销系统才能生效
$ cd confluent-5.5.1/bin
$ ./confluent local start # confluent包含了kafka及其依赖,该命令启动kafka、kafka-REST及其依赖
The local commands are intended for a single-node development environment
only, NOT for production usage. https://docs.confluent.io/current/cli/index.html
Using CONFLUENT_CURRENT: /tmp/confluent.aHx9DmNu
Starting zookeeper
zookeeper is [UP]
Starting kafka
kafka is [UP]
Starting schema-registry
schema-registry is [UP]
Starting kafka-rest
kafka-rest is [UP]
Starting connect
connect is [UP]
Starting ksql-server
ksql-server is [UP]
Starting control-center
control-center is [UP]
$ ./kafka-topics --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
created topic test.
# 在Grafana web上设定notifications,Kafka REST Proxy设置为http://172.16.22.28:8082,topic设置为test
# 在Grafana web -> notifications -> kafka REST Proxy Channel 点击Send Test,consumer会收到Grafana-server发出的测试JSON数据
$ ./kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning # consumer接收topic:test发出的消息
{
"alert_state":"alerting",
"client":"Grafana",
"client_url":"http://localhost:3000/",
"contexts":
[
{
"src":"https://grafana.com/assets/img/blog/mixed_styles.png",
"type":"image"
}
],
"description":"Test notification - Someone is testing the alert notification within grafana.",
"details":"Triggered metrics:\n\nHigh value: 100.000\nHigher Value: 200.000\n",
"incident_key":"alertId-0"
}
# 收到Grafana发出的测试JSON数据
测试虚拟机的IP地址及所部署服务的对照
172.16.22.28 # Confluent[Kafka-REST]、Kafka
172.16.22.236 # Grafana-server
172.16.22.66 # Prometheus、node-exporter 开机启动
Kafka在win10系统上的搭建教程
安装准备
-
下载jdk-8u251-windows-x64.exe
安装路径:
C:\Program Files\Java
添加系统环境变量
PATH="C:\Program Files\Java\jdk1.8.0_251\bin"
-
下载zookeeper-3.4.14
下载地址:https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
安装路径:
C:\Program Files\Kafka\zookeeper-3.4.14
添加系统环境变量
PATH="C:\Program Files\Kafka\zookeeper-3.4.14\bin"
打开新的cmd窗口,执行
zkServer
,请勿关闭该cmd窗口,保持zookeeper运行。
更高版本在执行zkServer时可能会报错【ZooKeeper audit is disabled】
-
安装Kafka 0.11
https://archive.apache.org/dist/kafka/0.11.0.0/kafka_2.12-0.11.0.0.tgz
安装路径:
C:\Program Files\Kafka\kafka_2.12-0.11.0.0
修改
C:\Program Files\Kafka\kafka_2.12-0.11.0.0\config\server.properties
log.dirs=C:\Program Files\Kafka\kafka_2.12-0.11.0.0\kafka-logs
Kafka会按照默认,在9092端口上运行,并连接zookeeper的默认端口:2181
打开新的cmd,执行以下命令,启动Kafka。
$ C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\kafka-server-start.bat "C:\Program Files\Kafka\kafka_2.12-0.11.0.0\config\server.properties"
zkServer日志显示以下类似消息,可忽略。
2020-07-01 10:54:00,298 [myid:] - INFO [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@653] - Got user-level KeeperException when processing sessionid:0x100001947d50000 type:create cxid:0x5 zxid:0x3 txntype:-1 reqpath:n/a Error Path:/brokers Error:KeeperErrorCode = NoNode for /brokers
这不是一个报错故障,只是一个user-level KeeperException。可以忽略不做处理的
kafka安装好后,第一次启动。zookeeper日志Error:KeeperErrorCode = NoNode for /config/topics/test
是因为kafka请求访问这个路径,但是这个路径还不存在,zookeeper就抛了这个error。
kafka会创建这个topic,然后访问zookeeper里topic对应的路径,zookeeper日志抛出error NodeExists for
/config/topics(kafka已经把topic创建好了),路径已经存在了。
综上所述,这些error是正常的日志信息,可以忽略。
测试Kafka
-
打开
C:\Program Files\Kafka\kafka_2.12-0.11.0.0\config\server.properties
修改
#advertised.listeners=PLAINTEXT://you.host.name:9092
->
advertised.listeners=PLAINTEXT://localhost:9092
-
执行命令 创建topic
$ C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
- 查看已创建的topic列表
$ C:\Program Files\Kafka\kafka_2.12-0.11.0.0\bin\windows>C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
test
- 创建Producer
$ C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
>hello_I'm_wang.
>
-
创建consumer
打开
C:\Program Files\Kafka\kafka_2.12-0.11.0.0\config\consumer.properties
在配置文件中添加以下内容
bootstrap.servers=localhost:9092,localhost:2181
-
执行命令 创建consumer
$ C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
- 查看topic
$ C:\Progra~1\Kafka\kafka_2.12-0.11.0.0\bin\windows\\kafka-topics.bat --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
ELK
安装
$ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.tar.gz
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz
$ tar -zxvf logstash-7.8.0.tar.gz
$ tar -zvxf elasticsearch-7.8.0-linux-x86_64.tar.gz
$ tar -zvxf kibana-7.8.0-linux-x86_64.tar.gz
测试 -> logstash
$ cd logstash-7.8.0
$ bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
Sending Logstash logs to /home/wang/logstash-7.8.0/logs which is now configured via log4j2.properties
[WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"7.8.0", "jruby.version"=>"jruby 9.2.11.1 (2.5.7) 2020-03-25 b1f55b1a40 Java HotSpot(TM) 64-Bit Server VM 25.51-b03 on 1.8.0_51-b16 +indy +jit [linux-x86_64]"}
[INFO ][org.reflections.Reflections] Reflections took 36 ms to scan 1 urls, producing 21 keys and 41 values
[INFO ][logstash.javapipeline ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>250, "pipeline.sources"=>["config string"], :thread=>"#<Thread:0x472c8923 run>"}
[INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"}
The stdin plugin is now waiting for input:
[INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
helloworld # 用户输入
/home/wang/logstash-7.8.0/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
"message" => "helloworld",
"host" => "localhost.localdomain",
"@version" => "1",
"@timestamp" => 2020-07-03T03:56:38.358Z
} # logstash的输出
测试 -> elasticsearch
$ cd elasticsearch-7.8.0
$ bin/elasticsearch
[2020-07-03T11:43:37,240][INFO ][o.e.n.Node ] [localhost.localdomain] version[7.8.0], pid[5084], build[default/tar/757314695644ea9a1dc2fecd26d1a43856725e65/2020-06-14T19:35:50.234439Z], OS[Linux/4.18.0-147.el8.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_51/25.51-b03]
[2020-07-03T11:43:37,240][INFO ][o.e.n.Node ] [localhost.localdomain] JVM home [/usr/local/java/jdk1.8.0_51/jre]
[2020-07-03T11:43:37,241][INFO ][o.e.n.Node ] [localhost.localdomain] JVM arguments [-Xshare:auto, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0
......
[2020-07-03T11:43:39,941][INFO ][o.e.p.PluginsService ] [localhost.localdomain] loaded module [aggs-matrix-stats]
[2020-07-03T11:43:39,941][INFO ][o.e.p.PluginsService ] [localhost.localdomain] loaded module [analysis-common]
......
[2020-07-03T11:43:39,947][INFO ][o.e.p.PluginsService ] [localhost.localdomain] no plugins loaded
[2020-07-03T11:43:39,997][INFO ][o.e.e.NodeEnvironment ] [localhost.localdomain] using [1] data paths, mounts [[/ (/dev/mapper/cl-root)]], net usable_space [7.4gb], net total_space [16.9gb], types [xfs]
[2020-07-03T11:43:39,997][INFO ][o.e.e.NodeEnvironment ] [localhost.localdomain] heap size [1007.3mb], compressed ordinary object pointers [true]
......
[2020-07-03T11:43:49,648][INFO ][o.e.c.s.ClusterApplierService] [localhost.localdomain] master node changed {previous [], current [{localhost.localdomain}{y2t48C1-T8uM1EJVHHeH9g}{qHaG14AcRs27A4Co5Pa0pQ}{127.0.0.1}{127.0.0.1:9300}{dilmrt}{ml.machine_memory=3940311040, xpack.installed=true, transform.node=true, ml.max_open_jobs=20}]}, term: 1, version: 1, reason: Publication{term=1, version=1}
[2020-07-03T11:43:49,719][INFO ][o.e.h.AbstractHttpServerTransport] [localhost.localdomain] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
[2020-07-03T11:43:49,719][INFO ][o.e.n.Node ] [localhost.localdomain] started
......
浏览器访问http://localhost:9200,有如下数据显示:
{
"name" : "localhost.localdomain",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "VQ13xV-zRpyx_JpnyGaiMQ",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
测试 -> Kibana
$ cd kibana-7.8.0-linux-x86_64
$ vi config/kibana.yml
# 添加如下内容,保存退出
#Elasticsearch主机地址
elasticsearch.hosts: "http://localhost:9200"
# 允许远程访问
server.host: "0.0.0.0"
# Elasticsearch用户名 这里其实就是我在服务器启动Elasticsearch的用户名
elasticsearch.username: "wang"
# Elasticsearch鉴权密码 这里其实就是我在服务器启动Elasticsearch的密码
elasticsearch.password: "CentOS系统中用户wang的password"
$ bin/kibana
log [03:50:12.522] [warning][plugins-discovery] Expect plugin "id" in camelCase, but found: apm_oss
log [03:50:12.533] [warning][plugins-discovery] Expect plugin "id" in camelCase, but found: triggers_actions_ui
log [03:50:37.231] [info][plugins-service] Plugin "visTypeXy" is disabled.
......
log [03:50:46.420] [info][status][plugin:apm_oss@7.8.0] Status changed from uninitialized to green - Ready
log [03:50:46.429] [info][listening] Server running at http://0.0.0.0:5601
log [03:50:46.857] [info][server][Kibana][http] http server running at http://0.0.0.0:5601
浏览器访问http://localhost:5601,出现UI画面。
- 参考资料:
《logstash最佳实践》:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/