茶香飘韵 發表於 2023-10-13 08:51:00

Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)

<div style="text-align: center; background-color: rgba(136, 136, 136, 1)"><span style="font-size: 23.9999980926514px; line-height: 40px">前言</span></div>
<p>上篇我们介绍了Skywalking的基本概念与如何接入.Net Core项目,感兴趣可以去看看:</p>
<p class="postTitle"><span>Skywalking APM监控系列(一丶.NET5.0+接入Skywalking监听)</span></p>
<p class="postTitle">本篇我们主要讲解一下Skywalking如何接入mysql数据库监听与Linux服务器的监听</p>
<p class="postTitle">其实从Skywalking设计之初 应该只是单独的链路跟踪,发展到现在 已经成为了一个成熟的APM框架了.</p>
<p class="postTitle">既然是APM那我们当然需要监听到数据库情况和服务器的情况.</p>
<p class="postTitle">本篇就讲讲如何监听这些数据</p>
<p class="postTitle">&nbsp;</p>
<div style="text-align: center; background-color: rgba(136, 136, 136, 1)"><span style="font-size: 23.9999980926514px; line-height: 40px">Mysql接入Skywalking</span></div>
<p>&nbsp;</p>
<p>mysql接入Skywalking需要两个工具:</p>
<p>mysqld-exporter</p>
<p>pentelemetry-collector</p>
<p>他们一个负责数据库的数据采集,一个负责将采集到的数据汇总后发送给Skywalking的OAP服务,并最终通过UI展示在界面上.</p>
<p>所以,我们需要先安装这两个工具,当然,他们也是支持容器化的,所以这里采用docker运行,如下:</p>
<h2>1.部署mysqld-exporter</h2>
<div class="cnblogs_code">
<pre>docker run -d -p <span style="color: rgba(128, 0, 128, 1)">9104</span>:<span style="color: rgba(128, 0, 128, 1)">9104</span> --name mysqld-exporte-e DATA_SOURCE_NAME=mysql_exporter:mysql_exporter@(mysql地址:<span style="color: rgba(128, 0, 128, 1)">3306</span>)/-e TZ=Asia/Shanghai prom/mysqld-exporter:v0.<span style="color: rgba(128, 0, 128, 1)">14.0</span></pre>
</div>
<p>这里,我们通过环境变量DATA_SOURCE_NAME,直接将数据库连接给赋予mysqld-exporter</p>
<p>&nbsp;</p>
<h2>2.部署pentelemetry-collector</h2>
<p>首先我们需要创建pentelemetry-collector的yaml配置文件,创建文件otel-collector-config.yaml,输入内容如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">receivers:
prometheus:
    config:
   scrape_configs:
       </span>- job_name: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mysql-monitoring</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
         scrape_interval: 5s
         static_configs:
         </span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mysqld-exporter:9104</span><span style="color: rgba(128, 0, 0, 1)">'</span>] #这里是mysqld-<span style="color: rgba(0, 0, 0, 1)">exporter的地址
             labels:
               host_name: showcase
processors:
batch:

exporters:
otlp:
    endpoint: SkyWalking OAP 地址:</span><span style="color: rgba(128, 0, 128, 1)">11800</span><span style="color: rgba(0, 0, 0, 1)">
    tls:
      insecure: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
service:
pipelines:
    metrics:
      receivers:
      </span>-<span style="color: rgba(0, 0, 0, 1)"> prometheus
      processors:
      </span>-<span style="color: rgba(0, 0, 0, 1)"> batch
      exporters:
      </span>- otlp</pre>
</div>
<p>这里解释一下含义:</p>
<div>
<p>1)receivers 用于配置&nbsp;Collector 的数据来源,这里是从 prometheus 的 mysqld_exporter 抓取数据;</p>
<p>2)exporters 用于配置要将接收到的数据发送到哪里,这里是发送到 SkyWalking OAP ;</p>
<p>3)processors 指定如何处理接收到的数据;</p>
<p>4)service 配置将整个 pipelines 串起来。</p>
<p>然后我们运行pentelemetry-collector容器,命令如下:</p>
<div class="cnblogs_code">
<pre>docker run -d -p <span style="color: rgba(128, 0, 128, 1)">55678</span>:<span style="color: rgba(128, 0, 128, 1)">55678</span>--name otel-collector-v /home/otel-collector-config.yaml:/etc/otel-collector-config.yaml-e TZ=Asia/Shanghai otel/opentelemetry-collector:<span style="color: rgba(128, 0, 128, 1)">0.86</span>.<span style="color: rgba(128, 0, 128, 1)">0</span> --config=/etc/otel-collector-config.yaml</pre>
</div>
<p>这里将我们刚写好的otel-collector-config.yaml文件映射至容器内,并通过这个配置运行pentelemetry-collector.</p>
<p>这样就完成了整个部署工作</p>
<h2>3.效果预览</h2>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/653851/202310/653851-20231012113118401-618093235.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<p>&nbsp;</p>
<div style="text-align: center; background-color: rgba(136, 136, 136, 1)"><span style="font-size: 23.9999980926514px; line-height: 40px">Linux服务器接入Skywalking</span></div>
<p>Linux服务器接入Skywalking也需要两个工具:</p>
<p>node_exporter</p>
<p>pentelemetry-collector</p>
<p>他们一个负责数据库的数据采集,一个负责将采集到的数据汇总后发送给Skywalking的OAP服务,并最终通过UI展示在界面上.</p>
<p>所以,我们需要先安装这两个工具,虽然node_exporter支持容器化运行,但是需要额外配置一些其他的东西,所以我们采取直接运行在linux主机上.(官网的最佳实践也是建议直接跑在服务器中)</p>
<h2>1.我们需要先安装node_exporter,下载地址如下:</h2>
<p>Release 1.6.1 / 2023-06-17 · prometheus/node_exporter (github.com)</p>
<p>各位根据需要,自行下载,(需小技巧上网)</p>
<p>然后我们将下好的压缩包复制到服务器上</p>
<p>通过命令解压,如下:</p>
<div class="cnblogs_code">
<pre>tar -xvf node_exporter-<span style="color: rgba(128, 0, 128, 1)">1.6</span>.<span style="color: rgba(128, 0, 128, 1)">1</span>.linux-amd64.tar.gz</pre>
</div>
<p>然后,我们需要创建一个系统服务,让node_exporter能够开机自启并通过系统管控,执行命令如下:</p>
<div class="cnblogs_code">
<pre>vim /etc/systemd/system/node_exporter.service</pre>
</div>
<p>复制如下内容:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">
Description</span>=<span style="color: rgba(0, 0, 0, 1)">node exporter service
Documentation</span>=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">prometheus.io</span>
After=<span style="color: rgba(0, 0, 0, 1)">network.target


Type</span>=<span style="color: rgba(0, 0, 0, 1)">simple
User</span>=<span style="color: rgba(0, 0, 0, 1)">root
Group</span>=<span style="color: rgba(0, 0, 0, 1)">root
ExecStart</span>=/home/skywalking/node_exporter-<span style="color: rgba(128, 0, 128, 1)">1.6</span>.<span style="color: rgba(128, 0, 128, 1)">1</span>.linux-amd64/<span style="color: rgba(0, 0, 0, 1)">node_exporter #这里是node_exporter的解压地址
Restart</span>=on-<span style="color: rgba(0, 0, 0, 1)">failure


WantedBy</span>=multi-user.target</pre>
</div>
<p>执行命令刷新系统服务命令:</p>
<div class="cnblogs_code">
<pre>systemctl daemon-reload</pre>
</div>
<p>开启node_exporter服务命令:</p>
<div class="cnblogs_code">
<pre>systemctl start node_exporter</pre>
</div>
<p>这里服务默认监听9100端口,请勿占用,如需变更,可以自行百度...</p>
<p>这样就完成了node_exporter的安装</p>
<p>&nbsp;</p>
<h2>2.修改pentelemetry-collector的配置</h2>
<p>我们直接修改otel-collector-config.yaml如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">receivers:
prometheus:
    config:
      scrape_configs:
      </span>- job_name: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">vm-monitoring</span><span style="color: rgba(128, 0, 0, 1)">"</span> # make sure to use <span style="color: rgba(0, 0, 255, 1)">this</span> <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> the vm.yaml to filter only VM metrics
          scrape_interval: 10s
          static_configs:
            </span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gateway.docker.internal:9100</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">] # 这里是主机服务器的采集地址
prometheus</span>/<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">:
    config:
   scrape_configs:
       </span>- job_name: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">mysql-monitoring</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
         scrape_interval: 5s
         static_configs:
         </span>- targets: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gateway.docker.internal:9104</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]# 这里是主机mysql的采集地址
             labels:
               host_name: showcase

processors:
batch:
batch</span>/<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">:

exporters:
otlp:
    endpoint: gateway.docker.</span><span style="color: rgba(0, 0, 255, 1)">internal</span>:<span style="color: rgba(128, 0, 128, 1)">11800</span><span style="color: rgba(0, 0, 0, 1)"> # 这里是OAP Server address

    tls:
      insecure: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
otlp</span>/<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">:
    endpoint: gateway.docker.</span><span style="color: rgba(0, 0, 255, 1)">internal</span>:<span style="color: rgba(128, 0, 128, 1)">11800</span><span style="color: rgba(0, 0, 0, 1)"># 这里是OAP Server address
    tls:
      insecure: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    #insecure: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">

service:
pipelines:
    metrics:
      receivers:
      processors:
      exporters:
    metrics</span>/<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">:
      receivers:
      processors:
      exporters: </pre>
</div>
<p>改好配置后,我们重启上面的pentelemetry-collector服务即可</p>
<h2>3.效果预览</h2>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/653851/202310/653851-20231012131225140-1785399119.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="text-align: center; background-color: rgba(136, 136, 136, 1)"><span style="font-size: 23.9999980926514px; line-height: 40px">前端JS如何接入Skywalking</span></div>
<p>Skywalking同时是可以支持监听整个前端的错误信息与运行情况的</p>
<p>相对来说也比较简单引入skywalking-client-js 这个包就可以了.</p>
<p>不过也要提一下,比如我们的前端可能托管在MVC.是通过视图来实现的前端,而不是各种前端脚手架.</p>
<p>那就需要单独引入一下.</p>
<p>我们通过npm引入skywalking-client-js 这个包</p>
<p>然后添加前端JS引用代码如下</p>
<div class="cnblogs_code">
<pre>    &lt;script src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">~/scripts/skywalking-client-js/lib/index.js</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;&lt;/script&gt;</pre>
</div>
<p>直接在_Layout母版页编写JS代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> ClientMonitor.register({
   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 基础配置</span>
   collector: GetService(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">skyaop</span><span style="color: rgba(128, 0, 0, 1)">"</span>), <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这里填写skywalkingapo的地址</span>
   service: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SPD_Web</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
   serviceVersion: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">@JSConfig.Version</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
   pagePath: window.location.href,
   useFmp: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
})</span></pre>
</div>
<p>这样,我们所有引用了母版页的前端界面 就都纳入到监听下了.</p>

</div>
<div id="MySignature" role="contentinfo">
    作者:顾振印
出处:http://www.cnblogs.com/GuZhenYin/
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面<br><br>
来源:https://www.cnblogs.com/GuZhenYin/p/17759287.html
頁: [1]
查看完整版本: Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)