初识Prometheus第三周

1.实现基于prometheus联邦收集node的指标数据

image.png

1.1 部署prometheus srever 、联邦节点

部署prometheus srever 、联邦节点的方法相同

#下载Prometheus
mkdir /apps
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar xvf prometheus-2.45.0.linux-amd64.tar.gz -C /apps/
ln -sv /apps/prometheus-2.45.0.linux-amd64/ /apps/prometheus

#启动服务
cat >>/etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
 
[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus/
ExecStart=/apps/prometheus/prometheus   --config.file=/apps/prometheus/prometheus.yml --web.enable-lifecycle
 
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start  prometheus && systemctl enable  prometheus

#检查服务
# ss -ntpl|grep 9090
LISTEN    0         4096                     *:9090                   *:*        users:(("prometheus",pid=1205826,fd=7))

1.2 部署node_exporter

#下载node_exporter
mkdir /apps
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvf node_exporter-1.6.1.linux-amd64.tar.gz -C /apps/
ln -sv   /apps/node_exporter-1.6.1.linux-amd64/ /apps/node_exporter

#启动服务
cat >>/etc/systemd/system/node-exporter.service <<EOF
[Unit]
Description=Prometheus Node Exporter
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
 
[Service]
ExecStart=/apps/node_exporter/node_exporter
 
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload 
systemctl start node-exporter.service

#检查服务
# ss -ntpl |grep 9100
LISTEN    0         4096                     *:9100                   *:*        users:(("node_exporter",pid=63519,fd=3))

1.3 配置联邦节点

#直接在配置文件最后添加
#联邦节点1
vim /apps/prometheus/prometheus.yml 
......
  - job_name: "node"
    static_configs:
      - targets: ["172.20.20.202:9100"]

#联邦节点2
vim /apps/prometheus/prometheus.yml 
......
  - job_name: "node"
    static_configs:
      - targets: ["172.20.20.203:9100"]

验证


image.png
image.png

1.4 Prometheus server采集联邦节点

#直接在配置文件最后添加
  - job_name: 'prometheus-federate-91'
    scrape_interval: 10s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'
        - '{__name__=~"node.*"}'
    static_configs:
    - targets:
      - '172.20.20.91:9090'

  - job_name: 'prometheus-federate-92'
    scrape_interval: 10s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'
        - '{__name__=~"node.*"}'
    static_configs:
    - targets:
      - '172.20.20.92:9090'

  - job_name: 'prometheus-k8s-federate-111'
    scrape_interval: 10s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
        - '{job="prometheus"}'
        - '{__name__=~"job:.*"}'
        - '{__name__=~"node.*"}'
    static_configs:
    - targets:
      - '172.20.20.111:39090'

验证


image.png
image.png

2.总结prometheus单机存储、实现victoriametrics单机远程存储

2.1 prometheus单机存储

Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概200多G空间。

2.1.1 本地存储简介

image.png

默认情况下,prometheus将采集到的数据存储在本地的TSDB数据库中,路径默认为prometheus安装目录的data目录,数据写入过程为先把数据写入wal日志并放在内存,然后2小时后将内存数据保存至一个新的block块,同时再把新采集的数据写入内存并在2小时后再保存至一个新的block 块,以此类推。


image.png

2.1.2 block简介

每个block为一个data目录中以01开头的存储目录


image.png

2.1.3 block特性

block会压缩、合并历史数据块,已经删除过期的块,随着压缩、合并,block的数量会减少,在压缩过程中会发生三件事:定期执行压缩、合并小的block到大的block、清理过期的块。

每个块有4部分组成:

# tree /apps/prometheus/data/01HC6TGHNR4V2ZTAN2K6XTY0MQ
/apps/prometheus/data/01HC6TGHNR4V2ZTAN2K6XTY0MQ
├── chunks
│   └── 000001      #数据目录每个大小为512MB超过会被切分为多个
├── index           #索引文件,记录存储的数据的索引信息,通过文件内的几个表来查找时序数据
├── meta.json       #block元数据信息,包含了样本数、采集数据的起始时间、压缩历史
└── tombstones      #逻辑数据,主要记载删除记录和标记要删除的内客,删除标记,可在查询块时排除样本。

1 directory, 4 files

2.1.4 本地存储配置参数

--config.file="prometheus.yml"      #指定配置文件
--web.listen-address="0.0.0.0:9090" #指定监听地址
--storage.tsdb.path="data/"         #指定数存储目录
--storage.tsdb.retention.size=Bl KB,MB,GB,TB,PB,EB  #指定chunk 大小,默认512MB
--storage.tsdb.retention.time=      #数据保存时长,默认15天
--query.timeout=2m                  #最大查询超时时间
-query.max-concurrency=20           #最大查询并发数
--web.read-timeout=5m               #最大空闲超时时间
--web.max-connections=512           #最大并发连接数
--web.enable-lifecycle              #启用API动态加载配置功能

2.2 victoriaMetrics单机远程存储

2.2.1 安装victoriaMetrics

#下载
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.5/victoria-metrics-linux-amd64-v1.93.5.tar.gz
tar xvf victoria-metrics-linux-amd64-v1.93.5.tar.gz
mv victoria-metrics-prod /usr/local/bin/

#启动
cat >> /etc/systemd/system/victoria-metrics-prod.service <<EOF
[Unit]
Description=For Victoria-metrics-prod Service
After=network.target
 
[Service]
ExecStart=/usr/local/bin/victoria-metrics-prod   -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=3
 
[Install]
WantedBy=multi-user.target
EOF

systemctl start victoria-metrics-prod.service

#检查
# ss -ntpl |grep 8428
LISTEN    0         32768              0.0.0.0:8428             0.0.0.0:*        users:(("victoria-metric",pid=451700,fd=7))

参数

-httpListenAddr=O.0.0.0:8428    #监听地址及端口
-storageDataPath    #VictoriaMetrics将所有数据存储在此目录中,默认为执行启动victoria的当前目录下的victoria-metrics-data目录中。
-retentionPeriod    #存储数据的保留,较旧的数据会自动删除,默认保留期为1个月,默认单位为m(月),支持的单位有h (hour), d (day), w (week),y (year)。
image.png

2.2.2 配置Prometheus

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).

#单机配置
remote_write:
  - url: http://172.20.20.121:8428/api/v1/write

2.2.3 验证数据

image.png

2.2.4 grafana查看

添加数据源


image.png

导入模版查看 模版11074


image.png

3.实现prometheus 基于victoriametrics 集群远程存储

3.1 集群架构

image.png
image.png
#组件说明
vminsert
写入组件(写),vminsert负责接收数据写入,并根据对度量名称及其所有标签的一致hash结果将数据分散写入不同的后端vmstorage节点,vminsert默认端口8480

vmstroage
存储原始数据并返回给定时间范围内给定标签过滤器的查询数据,默认端口8482

vmselect
查询组件(读),连接vmstorage,默认端口8481

vmagent
是一个很小但功能强大的代理,它可以从node_exporter各种来源收集度量数据,并将它们存储在VictoriaMetrics或任何其他支持远程写入协议的与 prometheus兼容的存储系统中,有替代prometheus server的意向。

vmalert
替代Prometheus server,以VictoriaMetrics为数据源,基于兼容Prometheus的告警规则,判断数据是否异常,并将产生的通知发送给alertmanager

vmgateway
读写VictoriaMetrics数据的代理网关,可实现限速和访问控制等功能,目前为企业组件

vmctl
VictoriaMetrics的命令行工具,目前主要用于将prometheus,opentsdb等数据源的数据迁移到VictoriaMetrics
image.png

3.2 部署服务

准备主机vm1 172.20.20.121 vm2172.20.20.122 vm3 172.20.20.123 ,各节点后面操作相同

#下载
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.5/victoria-metrics-linux-amd64-v1.93.5-cluster.tar.gz
tar xvf victoria-metrics-linux-amd64-v1.93.5-cluster.tar.gz
mv vm* /usr/local/bin/

#启动服务
#vmstorage-prod  负责数据的持久化,监控端口:API 8482,数据写入端口:8400,数据读取端口:8401
cat >> /etc/systemd/system/vmstorage.service <<EOF
[Unit]
Description=Vmstorage Server
After=network.target
 
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vmstorage-prod -loggerTimezone=Asia/Shanghai -storageDataPath=/data/vmstorage-data -httpListenAddr=:8482 -vminsertAddr=:8400 -vmselectAddr=:8401 
 
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload && systemctl enable vmstorage.service  && systemctl start vmstorage.service 

#vminsert-prod 接收外部的写请求,默认端口8480
cat >> /etc/systemd/system/vminsert.service <<EOF
[Unit]
Description=Vminsert Server
After=network.target
 
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vminsert-prod -httpListenAddr=:8480 -storageNode=172.20.20.121:8400,172.20.20.122:8400,172.20.20.123:8400
 
[Install]
WantedBy=multi-user.target
EOF
 
systemctl daemon-reload && systemctl enable vminsert.service  && systemctl start vminsert.service 

#vmselect-prod 负责接收外部的读请求,默认端口8481
cat >> /etc/systemd/system/vmselect.service <<EOF
[Unit]
Description=Vmselect Server
After=network.target
 
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vmselect-prod -httpListenAddr=:8481 -storageNode=172.20.20.121:8401,172.20.20.122:8401,172.20.20.123:8401
 
[Install]
WantedBy=multi-user.target
EOF
 
systemctl daemon-reload && systemctl enable vmselect.service  && systemctl start vmselect.service

#检查服务,三个节点启动的端口都是一样的
# ss -ntpl|grep 84
LISTEN    0         32768              0.0.0.0:8480             0.0.0.0:*        users:(("vminsert-prod",pid=453812,fd=3))                                      
LISTEN    0         32768              0.0.0.0:8481             0.0.0.0:*        users:(("vmselect-prod",pid=453776,fd=8))                                      
LISTEN    0         32768              0.0.0.0:8482             0.0.0.0:*        users:(("vmstorage-prod",pid=453799,fd=60))                                    
LISTEN    0         32768              0.0.0.0:8400             0.0.0.0:*        users:(("vmstorage-prod",pid=453799,fd=58))                                    
LISTEN    0         32768              0.0.0.0:8401             0.0.0.0:*        users:(("vmstorage-prod",pid=453799,fd=59))

可以网页访问三个节点的8480 8481 8482 的metrics查看是否启动成功

image.png

3.3 配置Prometheus

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).

#集群配置
remote_write:
  - url: http://172.20.20.121:8480/insert/0/prometheus
  - url: http://172.20.20.122:8480/insert/0/prometheus
  - url: http://172.20.20.123:8480/insert/0/prometheus

3.4 grafana查看

配置数据源,数据采集地址http://172.20.20.122:8481/select/0/prometheus可以通过HA做高可用

image.png

导入模版13824

image.png

3.5 开启数据复制

https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#replication-and-data-safety

默认情况下,数据被vminsert的组件基于hash算法分别将数据持久化到不同的vmstroage节点,可以启用vminsert组件支持的-replicationFactor=N(N为节点数)复制功能,将数据分别在各节点保存一份完整的副本以实现数据的高可用。

4.skywalking 架构整理、docker-compsoe安装、skywalking实现收集java博客追踪案例

4.1 skywalking 架构整理

4.1.1 skywalking 特点

  1. 实现从请求跟踪、指标收集和日志记录的完整信息记录。
  2. 多语言自动探针,支持Java、GO、Python、PHP、NodeJS、LUA、Rust等客户端。
  3. 内置服务网格可观察性,支持从Istio+Envoy Service Mesh收集和分析数据。
  4. 模块化架构,存储、集群管理、使用插件集合都可以进行自由选择。
  5. 支持告警。
  6. 优秀的可视化效果

4.1.2 skywalking 组件

b7cb14da004a5c1b040b2fa8168ce2f8_.png

组件介绍

  1. OAP平台(Observability Analysis Platform,可观测性分析平台)或OAP Server,它是一个高度组件化的轻量级分析程序,由兼容各种探针Receiver、流式分析内核和查询内核三部分构成。
  2. 探针:基于无侵入式的收集,并通过HTTP或者gRPC方式发送数据到OAP Server。
  3. 存储实现(Storage Implementors),SkyWalking OAP Server支持多种存储实现并且提供了标准接口,可支持不同的存储后端。
  4. UI模块(SkyWalking),通过标准的GraphQL(Facebook在2012年开源)协议进行统计数据查询和展示 。

4.1.3 设计模式:

  • 面向协议设计:面向协议设计是SkyWalking从5.x开始严格遵守的首要设计原则,组件之间使用标准的协议进行数据交互。
  • 协议有探针协议和查询协议

4.1.4 探针协议

  • 探针上报协议:协议包括语言探针的注册、Metrics数据上报、Tracing数据据上报等标准,Java、Go等探针都需要严格遵守此协议的标准。
  • 探针交互协议:因为分布式追踪环境,探针间需要借助HTTP Header、MQ Header在应用之间进行通信和交互,探针交互协议就定义了交互的数据格式。
  • Service Mesh协议:是SkyWalking对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上传指标数据,用于计算服务的指标数据和绘制拓扑图。
  • 第三方协议: 对大型的第三方开源项目 尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy Service Mesh进行无缝对接。

4.1.5 数据查询协议:

  • 元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。
  • 拓扑关系查询:查询全局、或者单个服务、Endpoint的拓扑图及依赖关系。
  • Metrics指标查询: 查询指标数据。
  • 聚合指标查询:区间范围均值查询及Top N排名数据查询等。
  • Trace查询:追踪数据的明细查询。
  • 告警查询:基于表达式,判断指标数据是否超出阈值。

4.1.6 skywalking设计

  • 模块化设计:
    1. 探针收负责集数据
    2. 前端负责展示数据
    3. 后端负责从后端存储读写数据
    4. 后端存储负责持久化数据

  • 轻量化设计:
    SkyWalking在设计之初就提出了轻量化的设计理念,SkyWalking使用最轻量级的jar包模式,实现强大的数据处理和分析能力、可扩展能力和模块化能力。

4.1.7 skywalking优势

  • 兼容性好:支持传统的开发框架dubbo和spring cloud,也支持云原生中的Istio和envoy。
  • 易于部署和后期维护:组件化,可以自定义部署,后期横向扩容简单
  • 高性能:每天数T的数据无压力
  • 易于二次开发:标准的http和grpc协议,开源的项目,企业可以自主二次开发

4.2 部署skywalking

4.2.1 通过docker-compsoe安装,服务器提前准备docker环境

#准备yaml文件
version: '3.3'
services:
  es7:
    image: elasticsearch:7.10.1
    container_name: es7
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node #单机模式
      - bootstrap.memory_lock=true #锁定物理内存地址
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #堆内存大小
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/elasticsearch/data:/usr/share/elasticsearch/data

  skywalking-oap:
    image: apache/skywalking-oap-server:8.6.0-es7
    container_name: skywalking-oap
    restart: always
    depends_on:
      - es7
    links:
      - es7
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: es7:9200

  skywalking-ui:
    image: apache/skywalking-ui:8.6.0
    container_name: skywalking-ui
    restart: always
    depends_on:
      - skywalking-oap
    links:
      - skywalking-oap
    ports:
      - 8080:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: skywalking-oap:12800

#创建数据目录
mkdir -p /data/elasticsearch/data
chmod 777 /data/elasticsearch/data -R

#启动
docker-compose up -d

#检查
# docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS                                                                                                    NAMES
47fe9ffdff0d   apache/skywalking-ui:8.6.0               "bash docker-entrypo…"   5 seconds ago   Up 4 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                                                skywalking-ui
25791232a47c   apache/skywalking-oap-server:8.6.0-es7   "bash docker-entrypo…"   6 seconds ago   Up 5 seconds   0.0.0.0:11800->11800/tcp, :::11800->11800/tcp, 1234/tcp, 0.0.0.0:12800->12800/tcp, :::12800->12800/tcp   skywalking-oap
41a9622a1d36   elasticsearch:7.10.1                     "/tini -- /usr/local…"   7 seconds ago   Up 5 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp                     es7

4.2.1 检查web页面

image.png

4.3 skywalking实现收集java博客追踪案例

4.3.1 准备环境和安装服务

#准备java运行环境
apt install openjdk-11-jdk -y

#下载项目
cd /apps
curl -L https://github.com/halo-dev/halo/releases/download/v1.5.4/halo-1.5.4.jar --output halo.jar
wget https://archive.apache.org/dist/skywalking/java-agent/8.8.0/apache-skywalking-java-agent-8.8.0.tgz
tar  xf apache-skywalking-java-agent-8.8.0.tgz

#修改skywalking-agent配置文件
# vim config/agent.config
18    agent.namespace=${SW_AGENT_NAMESPACE:halo }
21    agent.service_name=${SW_AGENT_NAME:halo}
93    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.20.20.211:11800}

#启动
java -javaagent:/apps/skywalking-agent/skywalking-agent.jar -jar /apps/halo-1.6.1.jar

4.3.2 查看web网页

image.png
image.png
image.png

4.3.3 查看skywalking监控界面

image.png

4.3.4 skywalking仪表盘简介

image.png
  • global: 显示服务的全局统计详情。
  • 服务(Service)-表示对请求提供相同行为的一系列或一组工作负载(服务名称),在使用Agent或SDK的时候,可以自定义服务的名字,如果不定义的话,SkyWalking将会使用你在平台(例如说 Istio)上定义的名字。
  • 服务实例(Instance)-上述的一组工作负载中的每一个工作负载称为一个实例(一个服务运行的节点),一个服务实例可以是一个kubernetes中的pod或者是一个虚拟机甚至是物理机 。
  • 端点(Endpoint) : 对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类 +方法签名, 如/api/v1/

4.3.4.1 skywalking仪表盘-global简介

image.png
  • CPM-calls per minute: 服务平均每分钟请求数
  • Slow Services ms: 慢响应服务, 单位ms
  • Un-Health services(Apdex): Apdex 性能指标, 1为满分
  • Slow Endpoints(ms): 全局维度的慢响应端点(API),例如一个接口, 显示的是全局慢响应Top N的数据,通过这个可以观测平台性能情况。
  • Global Response Latency(percentile inms): 全局响应延迟百分位数统计, 单位ms。
  • Global Heatmap: 服务响应时间热力分布图, 根据当时时间段内不同响应时间(0ms、 100ms)的数量用不同的颜色表示。

4.3.4.2 skywalking仪表盘-service简介

image.png
  • Service Apdex(数字) :当前服务的评分
  • Service Apdex(折线图) : 一段时间内Apdex评分
  • Service Avg Response Times(ms) : 平均响应延时,单位ms
  • Service Response Time Percentile: 百分比响应延时,参考Global Response Latency(percentile in ms)
  • Successful Rate(数字) : 请求成功率
  • Successful Rate(折线图) : 一段时间的请求成功率
  • Servce Load(CPM / PPM) (数字) : 每分钟请求数,
  • Servce Load(CPM / PPM) (折线图) : 不同时间的每分钟请求数
  • Service Throughput (Bytes) : 该指标只适用于TCP 服务。 当前服务的吞吐量。
  • Servce Instances Load(CPM / PPM) : 每个服务实例的每分钟请求数
  • Show Service Instance: 每个 服务 实例 的最大延时
  • Service Instance Successful Rate: 每个服务实例的请求成功率

4.3.4.3 skywalking仪表盘-instance简介

image.png
  • Service Instance Load (CPM / PPM) : 当前实例的每分钟请求数。
  • Service Instance Throughput (Bytes) : 该指标只适用于TCP 服务,显示当前服务实例的吞吐量。
  • Service Instance Successful Rate(%) : 当前实例的请求成功率。
  • Service Instance Latency(ms) : 当前实例的响应延时。
  • JVM CPU(Java Service) : jvm占用CPU的百分比。
  • JVM Memory (Java Service): JVM内存占用大小, 单位m, 包括堆内存, 与堆外内存(直接内存) 。
  • JVM GC Time(ms) : JVM垃圾回收时间, 包含YGC和OGC。
  • JVM GC Count: JVM垃圾回收次数, 包含YGC和OGC
  • JVM Thread Count (Java Service)。

4.3.4.4 skywalking仪表盘-endpoint简介

image.png

端点整体统计:

  • Endpoint Load in Current Service(CPM /PPM) : 每个端点(API) 每分钟请求数
  • Slow Endpoints in Current Service(ms) :每个端点(API) 的最慢响应请求时间, 单位ms
  • Successful Rate in Current Service(%) :每个端点(API) 的请求成功率

当前端点统计:

  • Endpoint Load: 当前端点每个时间段的请求数据
  • Endpoint Avg Response Time: 当前端点每个时间段的请求行响应时间
  • Endpoint Response Time Percentile(ms) :当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate(%) : 当前端点每个时间段的请求成功率

4.3.4.5 skywalking仪表盘-database简介

image.png
  • Database Avg Response Time(ms) : 当前数据库事件平均响应时间, 单位ms
  • Database Access Successful Rate(%) :当前数据库访问成功率
  • Database Traffic(CPM: Calls PerMinute) : 当前数据库每分钟请求数
  • Database Access Latency Percentile(ms) : 数据库不同比例的响应时间, 单位ms
  • Slow Statements(ms) : 前N个慢查询,单位ms
  • All Database Loads(CPM: Calls PerMinute) : 所有数据库中请求量排序
  • Un-Health Databases: 所有数据库不健康排名, 请求成功率排名, 失败最多的请求在最上。

4.3.4.6 skywalking仪表盘-拓扑图

image.png

4.3.4.7 skywalking仪表盘-追踪

image.png

5. skywalking 实现基于nginx+java服务的全链路数据收集

5.1 安装监控基于tomcat运行jenkins java程序服务

5.1.1 部署服务

#准备环境
apt-get update && apt install openjdk-11-jdk -y

#下载相关安装包
cd /apps
wget https://archive.apache.org/dist/skywalking/java-agent/8.8.0/apache-skywalking-java-agent-8.8.0.tgz
tar  xf apache-skywalking-java-agent-8.8.0.tgz
wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.94/bin/apache-tomcat-8.5.94.tar.gz
tar xvf apache-tomcat-8.5.94.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.426/jenkins.war
mv jenkins.war apache-tomcat-8.5.94/webapps/

#修改相关配置
# vim /apps/skywalking-agent/config/agent.config
...
18    agent.namespace=${SW_AGENT_NAMESPACE:jenkins}
21    agent.service_name=${SW_AGENT_NAME:jenkins}
93    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.20.20.211:11800}

# vim /apps/apache-tomcat-8.5.94/bin/catalina.sh
...
   125    
   126    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/apps/skywalking-agent/skywalking-agent.jar"
   127    # OS specific support.  $var _must_ be set to either true or false.
   128    cygwin=false
   129    darwin=false

#启动服务
/apps/apache-tomcat-8.5.94/bin/catalina.sh run

#查看端口
# ss -ntpl |grep java
LISTEN   0        1           [::ffff:127.0.0.1]:8005                  *:*       users:(("java",pid=58207,fd=266))                                              
LISTEN   0        100                          *:8080                  *:*       users:(("java",pid=58207,fd=161)) 

5.1.2 检查jenkins

image.png

http://172.20.20.212:8080/jenkins/

image.png

5.1.3 查看skywalking server端是否有新数据

image.png
image.png

5.2 部署监控nginx服务

#部署前,准备下环境
apt -y install make gcc libpcre3 libpcre3-dev openssl libssl-dev zlib1g-dev

5.2.1 编译安装luajit

wget https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20230410.tar.gz
tar xvf v2.1-20230410.tar.gz
cd luajit2-2.1-20230410/
make install PREFIX=/usr/local/luajit2-2.1

#配置环境变量
#  vim /etc/profile
#添加到文件末尾  
export LUAJIT_LIB=/usr/local/luajit2-2.1/lib
export LUAJIT_INC=/usr/local/luajit2-2.1/include/luajit-2.1

# source  /etc/profile

#加载luajit2模块,nginx启动需要调用libuajit-5.1.so.2模块
# vim /etc/ld.so.conf.d/libc.conf
/usr/local/lib
/usr/local/luajit2-2.1/lib/

#动态加载
ldconfig     

5.2.2 编译安装lua核心库,nginx需要加载lua库

#编译安装lua-resty-core库
wget https://github.com/openresty/lua-resty-core/archive/refs/tags/v0.1.26.tar.gz
mv v0.1.26.tar.gz lua-resty-core-v0.1.26.tar.gz
tar xvf lua-resty-core-v0.1.26.tar.gz
cd lua-resty-core-0.1.26/
make install PREFIX=/usr/local/luacore

#编译安装lua-resty-lrucache库
wget https://github.com/openresty/lua-resty-lrucache/archive/refs/tags/v0.13.tar.gz
mv v0.13.tar.gz lua-resty-lrucache-v0.13.tar.gz
tar xvf lua-resty-lrucache-v0.13.tar.gz
cd lua-resty-lrucache-0.13/
make install PREFIX=/usr/local/luacore

5.2.3 编译安装lua-cjson库

wget https://github.com/mpx/lua-cjson/archive/refs/tags/2.1.0.tar.gz
mv 2.1.0.tar.gz lua-cjson-2.1.0.tar.gz
tar xvf lua-cjson-2.1.0.tar.gz
cd lua-cjson-2.1.0/

#修改编译文件
# vim Makefile   #修改21行内容
22 LUA_INCLUDE_DIR =   /usr/local/luajit2-2.1/include/luajit-2.1

# vim lua_cjson.c  #修改1298行内容
1298 void luaL_setfuncs (lua_State *l, const luaL_Reg *reg, int nup)

#编译,有报错,但不影响
# make
cc -c -O3 -Wall -pedantic -DNDEBUG  -I/usr/local/luajit2-2.1/include/luajit-2.1 -fpic -o lua_cjson.o lua_cjson.c
In file included from lua_cjson.c:47:
fpconv.h:15:20: warning: inline function ‘fpconv_init’ declared but never defined
   15 | extern inline void fpconv_init();
      |                    ^~~~~~~~~~~
cc -c -O3 -Wall -pedantic -DNDEBUG  -I/usr/local/luajit2-2.1/include/luajit-2.1 -fpic -o strbuf.o strbuf.c
cc -c -O3 -Wall -pedantic -DNDEBUG  -I/usr/local/luajit2-2.1/include/luajit-2.1 -fpic -o fpconv.o fpconv.c
cc  -shared -o cjson.so lua_cjson.o strbuf.o fpconv.o

# make install
mkdir -p //usr/local/lib/lua/5.1
cp cjson.so //usr/local/lib/lua/5.1
chmod 755 //usr/local/lib/lua/5.1/cjson.so

5.2.4 准备ngx_devel_kit源码

wget https://github.com/vision5/ngx_devel_kit/archive/refs/tags/v0.3.2.tar.gz
mv v0.3.2.tar.gz ngx_devel_kit-v0.3.2.tar.gz
tar xvf ngx_devel_kit-v0.3.2.tar.gz

5.2.5 准备lua-nginx-module源码

wget https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.24.tar.gz
mv v0.10.24.tar.gz lua-nginx-module-v0.10.24.tar.gz
tar xvf lua-nginx-module-v0.10.24.tar.gz

5.2.6 编译安装nginx

# wget https://nginx.org/download/nginx-1.22.0.tar.gz
# tar xvf nginx-1.22.0.tar.gz
# cd nginx-1.22.0/
# mkdir /apps
#  ./configure --prefix=/apps/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--add-module=../ngx_devel_kit-0.3.2 \
--add-module=../lua-nginx-module-0.10.24

# make && make install

#验证lua环境
# vim /apps/nginx/conf/nginx.conf
...
http {
#在http段下添加
    lua_package_path "/usr/local/luacore/lib/lua/?.lua;;";
}

#在server段下面添加
location /hello  {
         default_type  text/html;
             content_by_lua_block {
             ngx.say("Hello Lua!")
             }
}

访问


image.png

5.2.7 部署skywalking-nginx客户端

cd /apps
wget https://github.com/apache/skywalking-nginx-lua/archive/refs/tags/v0.6.0.tar.gz
tar xvf v0.6.0.tar.gz

#准备lua-tablepool库(没有此库,访问无法显示)
# git clone https://github.com/openresty/lua-tablepool.git
# cp lua-tablepool/lib/tablepool.lua /apps/skywalking-nginx-lua-0.6.0/lib/
或
# wget https://github.com/openresty/lua-tablepool/archive/refs/tags/v0.02.tar.gz
# tar -xf lua-tablepool-0.02.tar.gz
# cp lua-tablepool-0.02/lib/tablepool.lua  /apps/skywalking-nginx-lua-0.6.0/lib/

准备nginx配置文件并启动

# vim /apps/nginx/conf/nginx.conf    # 加载lua,配置收集数据
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    lua_package_path "/usr/local/luacore/lib/lua/?.lua;/apps/skywalking-nginx-lua-0.6.0/lib/?.lua;;";
    sendfile        on;
    keepalive_timeout  65;
    
    include /apps/nginx/conf/conf.d/*.conf;

}

# vim /apps/nginx/conf/conf.d/myserver.conf 
# lua_package_path "/usr/local/luacore/lib/lua/?.lua;/apps/skywalking-nginx-lua-0.6.0/lib/?.lua;;";   #该配置在之前http段配置了,这里不用配置
    lua_shared_dict tracing_buffer 100m;
    init_worker_by_lua_block {
        local metadata_buffer = ngx.shared.tracing_buffer
        metadata_buffer:set('serviceName', 'myserver-nginx')
        metadata_buffer:set('serviceInstanceName', 'skywalking-agent-02')
        metadata_buffer:set('includeHostInEntrySpan', false)
        require("skywalking.util").set_randomseed()
        require("skywalking.client"):startBackendTimer("http://172.20.20.211:12800")
        skywalking_tracer = require("skywalking.tracer")
    }

    server {
        listen 80;
        server_name www.myserver.com;
        location /jenkins {
            default_type text/html;
            rewrite_by_lua_block {
                skywalking_tracer:start("www.myserver.com")
            }

            proxy_pass http://172.20.20.212:8080/jenkins;

            body_filter_by_lua_block {
                if ngx.arg[2] then
                    skywalking_tracer:finish()
                end
            }
            log_by_lua_block {
                skywalking_tracer:prepareForReport()
            }
        }
        location / {
          default_type test/html;
          root html;
          rewrite_by_lua_block {
              skywalking_tracer:start("local") 
          }

          body_filter_by_lua_block {
              if ngx.arg[2] then
                  skywalking_tracer:finish()
              end
          }
         
          log_by_lua_block {
              skywalking_tracer:prepareForReport()
          }
        }    
    }

# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

# nginx  -s reload

5.2.8 检查

image.png
image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容