其他分享
首页 > 其他分享> > Elastic 可观测性小练习

Elastic 可观测性小练习

作者:互联网

视频链接:https://cloud.tencent.com/developer/salon/live-1443
ppt链接:https://docs.qq.com/slide/DUGRzYVVTU3ZxblBP
操作文档链接:https://elastic.martinliu.cn/codelabs/elastic-observability-foundation-qq

目的

可观测性是目前云原生里面比较火的概念,从最初我们学习开发从主机模式着手到基于 C/S 架构的开发模式,接着是从 J2EE 到现在的微服务和基于容器的服务,以及目前比较热门的基于流程编排的开发架构。但我们发现虽然开发、迭代、交付的效率得到了很大的提升系统或者应用变得复杂。

而可观察性是一套理念系统,没有对技术的具体要求。其重点是团队要融入可观察性的理念,特别是要求研发写出的应用是可观察的。将可观察性包含在你的需求之中,它是与扩展性,可用性同等重要的非业务性需求。

Apple 的工程师 Cindy Sridharan 的博文“监控与观察”(Monitoring and Oberservability)首次将 Oberservability 一次带入开发者的视野。

引用一下 Baron SchSchwarz 大咖的一个定义:“监控告诉我们系统的哪些部分是工作的。可观测性告诉我们那里为什么不工作了。”这句话即定义了可观测性,也告诉了我们可观测性和传统的监控的区别。在这里插入图片描述

对公司的运维团队来说,比较尴尬的是当监控系统显示状态为“绿色”的情况下,我们的客服系统却被打爆了。业务部门的同事也来向你投诉,业务系统已经不能正常工作了。另外一种情况就是你自己也已经发现监控系统已经爆红了,监控系统也没办法告诉你到底是哪里不工作了,以及为何不工作了。

为了解决这样的窘境呢,我们希望能站在应用系统本身出发去探讨另外一个概念或者特性——应用系统的可观测性。尤其是最前面提到的在当今云原生时代下的应用系统的可观测性。

我们用 Elastic Stack 技术栈练习下可观测性构建的方法,Elastic可观测性主要有三个部分组成:在这里插入图片描述

构建云原生可观测性步骤

第一步是应用服务的健康检查
第二步是做应用服务的指标分析
第三步是日志收集
第四部是做apm应用追踪
在这里插入图片描述

环境准备

腾讯云 轻量级服务器
腾讯云 ES集群

确保CentOS 虚拟机可以正常访问 ES 集群所在网段,所有端口可达
因为腾讯刚好有免费体验的活动想薅腾讯爸爸的羊毛,分别创建了两个服务,因为是对应不同的vpc我又建立了对等连接(network connnect),建好后结果还是连不上。因为免费,所在的区、vps都无法自己指定。最后把es服务开了公网并把CentOS 虚拟机的ip添加到es的白名单。

curl -XGET -u 'elastic:Elastic@1234#'    https://es-e7r3xccy.public.tencentelasticsearch.com:9200

在这里插入图片描述

PUT _all/_settings
  {
    "refresh_interval": "1s"
  }
yum install -y java-11-openjdk.x86_64 nodejs git nginx

tips 1: 如果提示没有可用软件包 nodejs,只能wget 安装包了,具体做法如下:

yum install -y wget

wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz

tar -xvf node-v12.18.1-linux-x64.tar.xz

ln -s /root/elastic-labs-qq/petclinic/frontend/node-v12.18.1-linux-x64/bin/node /usr/bin/node
ln -s   /root/elastic-labs-qq/petclinic/frontend/node-v12.18.1-linux-x64/bin/npm /usr/bin/npm 

node -v

npm -v

tips 2: 如果提示 没有可用软件包 nginx。

 sudo yum install epel-release
yum install -y nginx

git clone https://gitee.com/devopscoach/elastic-labs-qq.git
cd elastic-labs-qq
cd petclinic/frontend/
npm install

这样服务就启动了

健康检查

我们的各种业务服务当前的状态是否可用、能否处理更多的工作量(可用性和饱和度)。好的健康检查会提供service name、is health、work load是高是低、以及apm服务依赖。如下:在这里插入图片描述
在Elastic stack中提供heartbeat的健康检查工具,heatbeat可以针对网络应用层不同的协议做不同的探针,我们需要针对internal service(内网对客户屏蔽的)和 external service的做不同的健康检查。在这里插入图片描述
这里演示heartbeat监控kibana service服务:

进入 heartbeat 的配置文件目录中,cd /etc/heartbeat/。heartbeat .yml可以设置对monitor.d检测的周期。
在这里插入图片描述

# 在这里设置对monitor。d检测的路径,检测加载周期时间等
heartbeat.config.monitors:
  path: ${path.config}/monitors.d/*.yml
  reload.enabled: true
  reload.period: 5s
# 其实应该在monitor。d中进行配置,这里图方便在这里配置
heartbeat.monitors:
- type: http
  id: my-monitor
  name: my-kibana-service
  urls: ["http://hadoop01:5601/"]
  schedule: '@every 5s'
setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression
setup.kibana:
output.elasticsearch:
  hosts: ["192.168.2.2:9200"]
#如果是外网探测的话最好输入下地址位置坐标,因为我后来是本地测试的 不需要地理位置信息
# processors:
#  - add_observer_metadata:
   #   geo:
      #  name: China-SZ
      #  location: "120.6199071,31.3179873"
# test 命令是检查配置文件的语法和与 Elasticsearch 服务的连接和认证是否正常
heartbeat test config
heartbeat test output

#setup 的作用是初始化 Heartbeat 的索引,导入相关的数据管理策略
heartbeat setup

# 运行heatbeat,本案例主要是检测kibana服务的健康状况
heartbeat -e

在这里插入图片描述

在 Kibana 中查看 Uptime app 中的数据

我们先打开kibana,点击obserbility的菜单
或者直接点击uptime子菜单,可以看到在这里插入图片描述点击my-kibana-service可以看到更细粒度的监控。
查看目前的服务部署点:在这里插入图片描述
如果你的集群是白金版的Liscense,我们可以使用机器学习做一些单指标异常分析,因为通常我们的指标非常多、设定告警阈值比较麻烦,使用机器学习的功能可以替代设定单一告警:在这里插入图片描述
在这里插入图片描述
这个时候我们点开机器学习的界面,发现有一个job在运行了:在这里插入图片描述
至此,heatbeat的准备工作完成。最后在命令行里按 ctrl + c 终止 ‘heartbeat -e’ 命令。然后运行一下命令,后台启动 heartbeat 服务。


systemctl start heartbeat-elastic.service
systemctl enable  heartbeat-elastic.service 
systemctl status  heartbeat-elastic.service 
指标采集

指标是在连续的时间周期里度量的KPI数值,
监控指标的三种类型、来源:
在这里插入图片描述

其中,系统指标就是部署服务的主机等物理指标;应用指标比如一些消息中间件Kafka RocketMQ之类的吞吐、时延等指标;业务指标是最能反应业务系统正常的指标,通常有两种做法:1.通过监控工具厂商提供的外挂的接口,写一段往外吐指标的功能比如promethus的exporter 2.感兴趣的可以研究下CNCF的OpenTelemetry项目。

一般的指标监控部署如下,针对beats在不同AZ、不同网段采集信息,logstash起到了汇聚和转发的作用。
在这里插入图片描述

metricbeat setup -e   --index-management   --dashboards \
 -E output.elasticsearch.hosts=['192.168.2.2:9200']   \
 -E output.elasticsearch.username=elastic   \
 -E output.elasticsearch.password=Elastic@1234#   \
 -E setup.kibana.host=hadoop03:5601
#=========================== Modules configuration ============================
# 我们不想频繁地重启metricbeat服务,因此在修改完配置文件时候,该模块负责刷新和重新加载
metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s

#=========================== Elasticsearch output =============================
output.elasticsearch:
  hosts: ["172.21.16.16:9200"]
  username: "elastic"
  password: "Elastic@1234#"

#=============================== Processors ===================================
processors:
  - add_host_metadata: 
      netinfo.enabled: true
      cache.ttl: 5m
      geo:
        name: bj-dc-01
        location: 35.5528, 116.2360
        continent_name: Asia
        country_iso_code: CN
        region_name: Beijing
        region_iso_code: CN-BJ
        city_name: Beijing 
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
  - add_fields:
      target: ''
      fields:
        service.name: 'Pet Clinic'
        service.id: 'petclinic-vm'

#==================== Best Practice Configuration ==========================
setup.ilm.check_exists: false
logging.level: error
queue.spool: ~
monitoring.enabled: true

个别参数解释:
output.elasticsearch 部分配置了,Elasticsearch 集群的内网访问地址,elastic 的账户密码
netinfo.enabled: true 收集所有网卡的配置信息
service.name 和 service.id 设定运行在本操作系统上的应用系统的名字,用于丰富每一个指标采集点的元数据
setup.ilm.check_exists: false 禁用索引 ilm 策略检查,避免无用动作
logging.level: error 把Beats自身的日志记录调到最低级别降低
queue.spool: ~ 开启本地默认的端点缓存行为
在这个配置文件中的 Elasticsearch 部分使用了管理员账户信息,生产上不推荐这么做,可以将其替换为密码形式配置

metricbeat test config
metricbeat test output

systemctl enable  metricbeat
systemctl start  metricbeat
systemctl status  metricbeat

在提示 OK 的情况下,启用并开启 metricbeat 的后台指标采集服务。

打开 Kibana 界面
打开左侧菜单栏,点击 ‘Dashboard’ 选项
在页面的搜索框中输入 system 后,查看 Metricbeat 自带的仪表板,它们是 setup 命令导入的。
点击查看名为 “[Metricbeat System] Overview ECS” 的仪表板。
在 System Overview 和 Host Overview 的两个视图中切换查看

在这里插入图片描述
在这里插入图片描述

System Overview 是当前所有被监控系统的指标统计汇总
Host Overview 是某一个操作系统的监控指标展示

启用 Nginx 监控模块

启动nginx:
systemctl start nginx
查看状态:
systemctl status nginx
外网访问nginx地址在这里插入图片描述
Metricbeat 默认采集系统的指标。我们之前在这个服务器上安装了 Nginx,下面启用 Metricbeat 对 Nginx 的监控模块。

metricbeat modules enable nginx
metricbeat modules list

在这里插入图片描述
首先,需要修改 Nginx 服务器的配置文件,启用 Nginx 的 ngx_http_stub_status 模块。 编辑 /etc/nginx/nginx.conf 文件,在 Server 段落中增加以下内容。

location /server-status {
            stub_status on;
            access_log off;
        }

修改好之后,重启 Nginx 服务,并测试验证该模块是否已经启用。

systemctl restart nginx
curl localhost/server-status

其次,查看一下 Metricbeat 的 nginx 的配置文件,并不需要做任何修改。

cat /etc/metricbeat/modules.d/nginx.yml

这个时候我们返回kibana查看obserbility就可以看到metric指标了在这里插入图片描述
在这里插入图片描述

我们也可以去nginx dashboard查看在这里插入图片描述
在这里插入图片描述

日志

通俗地讲,日志告诉我们何时何地发生了什么事情。在这里插入图片描述

通常来说日志有些是机器生成的,有些的app生成的。如果机器生成的日志,比如操作系统、中间件、消息队列、数据库等都是属于行业规则文件,不需要做解析市面的监控工具都已经集成了。但app的日志需要进行进一步的解析。
请求型日志:在这里插入图片描述
排错日志:在这里插入图片描述
所以好的日志系统要满足以下三点:
在这里插入图片描述
可关联性就是使用一个traceID讲不同来源的数据关联起来:在这里插入图片描述

yum install -y https://mirrors.tencent.com/elasticstack/7.x/yum/7.10.1/filebeat-7.10.1-x86_64.rpm
filebeat setup -e   --index-management   --dashboards \
  -E output.elasticsearch.hosts=['192.168.2.2:9200']   \
  -E setup.kibana.host=192.168.2.2:5601

加载完kibana的dashboard会发现很多模版.
然后,我们点击stack management—》ilm 对索引做生命周期的修改在这里插入图片描述
索引有hot 、warm、cold phase,我们需要设置delete phase,假设我们超过十天的索引就不用。在这里插入图片描述

#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log

#============================= Filebeat modules ===============================
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 60s

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  hosts: ["172.21.16.16:9200"]
  username: "elastic"
  password: "Elastic@1234#"

#================================ Processors =====================================
processors:
  - add_host_metadata: 
      netinfo.enabled: true
      cache.ttl: 5m
      geo:
        name: bj-dc-01
        location: 35.5528, 116.2360
        continent_name: Asia
        country_iso_code: CN
        region_name: Beijing
        region_iso_code: CN-BJ
        city_name: Beijing 
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
  - add_fields:
      target: ''
      fields:
        service.name: 'Pet Clinic'
        service.id: 'petclinic-vm'

#==================== Best Practice Configuration ==========================
setup.ilm.check_exists: false
logging.level: error
queue.spool: ~
monitoring.enabled: true

netinfo.enabled: true 收集所有网卡的配置信息
service.name 和 service.id 是运行在本操作系统上的应用系统的名字

filebeat test config
filebeat test output
filebeat -e

在这里插入图片描述

如果以上命令不报错的话,继续下面的步骤启用 Filebeat 模块和启动 Filebeat 服务。

Filebeat 的 processors 处理器机制可以实现丰富的日志字段丰富和处理,基于 Elastic ECS 通用数据定义的日志元数据丰富在本课程中不作讲解。请大家课后深入学习。另外应用程序和日志采集工具的配合也不在此做深入讨论,请开发者在设计程序的日志输出机制时,同时考虑到后期的日志采集工具。
在配置文件的最后一行添加monitor.enable:true 我们不想看数据,只想看monitor在不在正常工作—》到kibana,stack monitoring --> 在cluster listing选择集群—>查看beats状态

启用 Filebeat 的系统日志采集和 Nginx 服务日志采集。

filebeat  modules enable system nginx

在这里插入图片描述

systemctl enable  filebeat
systemctl start  filebeat
systemctl status  filebeat

在这里插入图片描述
我们可以到discover里面查看filebeat*是否有数据

在这里插入图片描述
我们再次回到可观测性界面:
在这里插入图片描述

在这里插入图片描述

APM

日志不报错、指标不报错在这里插入图片描述

APM多了apm-server组件,apm-server是聚合服务器在这里插入图片描述
在这里插入图片描述

yum install -y https://mirrors.cloud.tencent.com/elasticstack/7.x/yum/7.10.1/apm-server-7.10.1-x86_64.rpm
cd /etc/apm-server/
apm-server:
  host: "0.0.0.0:8200"
  rum:
    enabled: true
output.elasticsearch:
  hosts: ["172.21.16.16:9200"]
  username: "elastic"
  password: "Elastic@1234#"
apm-server test config
apm-server test output

在这里插入图片描述

apm-server setup
apm-server -e
chown apm-server:apm-server /var/lib/apm-server/meta.json
chown apm-server:apm-server /etc/apm-server/apm-server.yml
chmod 0600 /etc/apm-server/apm-server.yml
systemctl start  apm-server
systemctl enable  apm-server
systemctl status  apm-server

在这里插入图片描述

运行宠物诊所演示程序

java -javaagent:elastic-apm-agent-1.18.1.jar -Delastic.apm.service_name=petclinic-spring -Delastic.apm.server_urls=http://localhost:8200 -jar spring-petclinic-1.5.16.jar

配置 Nginx 为宠物诊所的反向代理

让 Nginx 代理所有 80 端口的访问到 node.js 访问的 4000 端口上。

修改 nginx.conf 配置文件,在 location 这个段落中增加一行。

location / {
            proxy_pass http://localhost:4000;
        }

在这里插入图片描述

重启nginx

公网 IP 地址。例如:http://188.131.151.204/ 。你将依然能够正常访问宠物诊所应用的所有页面。

最后,增加宠物诊所应用系统的健康检查探针。这里详细看操作手册

标签:Elastic,service,setup,练习,server,elastic,apm,性小,heartbeat
来源: https://blog.csdn.net/dtzly/article/details/117442016