elastic-apm部署
发布时间:2022-03-29 10:47:26

什么是 APM?

利用应用程序性能监测,您可以查看应用程序将时间花在哪些地方、在执行哪些操作、在调用哪些其他应用程序或服务,以及遇到了哪些错误或异常情况。


elastic-apm部署


通过 APM,还可以了解关键性能指标的历史记录和趋势,比如延迟和吞吐量,以及事务和依赖信息:


elastic-apm部署


逻辑架构

Elastic APM 依赖于 APM 服务器,后者会将应用程序跟踪和指标数据从安装有 APM 代理的应用程序转发到 Elastic 可观测性集群。Elastic APM 支持多种不同的代理类型:

原生 Elastic APM 代理,支持多种语言,包括 Java、.NET、Go、Ruby、Python、Node.js、PHP 和客户端 JavaScript

已装载 OpenTelemetry 测量工具的代码

已装载 OpenTracing 测量工具的代码

已装载 Jaeger 测量工具的代码


elastic-apm部署


设置 APM 服务器

APM 服务器将跟踪和应用程序指标数据从 APM 代理转发到 Elasticsearch。要将 APM 数据添加到 Elastic 可观测性集群,我们可以按照 Kibana 本身提供的简要说明进行操作。在 Kibana 中在确认 Elasticsearch 和 Kibana 正在运行后,连接到 Kibana 实例。例子是ansible 安装部署tomcat。


1.下载 APM服务器,将 APM 服务器连接到 Elasticsearch


1、playbook

---

- hosts: exporter_node    //定义部署的主机类型

  become: yes

  become_method: sudo

  become_user: root        //提升至root权限

  roles:                             //指定执行哪个roles

    - role: apm-server

  vars:                               //变量定义

#   Apm_server 版本

    apm_version: "7.14.2"

#   自定义secret_token 需要同apm-agent对应

    apm_secret_token: ""

#   ES主机IP:Port

    elastic_hosts: ""

#   ES 用户名

    elastic_username: "elastic"

#   ES 密码

elastic_password: "XXXXXXXXXXXXX"


2、roles

在roles文件中包含:

Defaults:默认变量会放在defaults目录下的main.yml

Files:存放安装包

Hanlders:编写一些触发任务,例如重启

Tasks:执行的任务,具体的执行逻辑

Tempaltes:存放模板,例如服务文件,配置文件

Vars: 存放变量优先级大于vars


1-2203291052131H.png


Tasks目录下的

Main.yml:调用其他任务模块

---


- name: install_apm    //安装apm

  include_tasks: install_apm.yml


- name: make dictionary        //创建目录

  include_tasks: mkdir.yml


- name: copy certs                 //复制证书

  include_tasks: copy_certs.yml


- name: replace apm-server.yml    //替换apm-server.yml文件

  include_tasks: replace.yml


install_apm.yml:

---

- name: download apm server  //下载rpm安装包

  become: true

  get_url:

    url: "http://xxxx/elk/{{apm_version}}/apm-server-{{apm_version}}-x86_64.rpm"

    dest: "/tmp/apm-server-{{apm_version}}-x86_64.rpm"

    mode: '0644'

  register: _down_apm

  until: _down_apm is succeeded

  retries: 5

  delay: 2

#  remote_src: yes

  check_mode: false


- name: install rpm    //进行安装

  yum:

    name: "/tmp/apm-server-{{apm_version}}-x86_64.rpm"

    state: present


mkdir.yml:创建目录并赋予对应的权限

---

- name: Creates directory

  file:

    path: /etc/apm-server/cert

    state: directory

    owner: root

    group: root

mode: 0755


copy_certs.yml:因为开启认证所以需要证书,将证书和key复制到对应位置

---

- name: copy certs

  copy:

   src: apmserver.crt

   dest: /etc/apm-server/cert

   owner: root

   group: root


- name: copy key

  copy:

   src: apmserver.key

   dest: /etc/apm-server/cert

   owner: root

   group: root


replace.yml:替换apm-server.yml文件,重新启动

---

- name: replace apm-server.yml   

  template:

    src: apm-server.yml.j2

    dest: /etc/apm-server/apm-server.yml

    owner: root

    group: root

    mode: 0755

  notify: restart the service


templates目录下的service文件:


1-220329105231937.png


apm-server:

  host: "0.0.0.0:8200"

  rum:

    enabled: true

  kibana:

    enabled: true

    host: "xxxxx:5601"

    username: "elastic"

    password: "{{elastic_password}}"


apm-server.ssl.enabled: true

apm-server.ssl.certificate: "/etc/apm-server/cert/apmserver.crt"

apm-server.ssl.key: "/etc/apm-server/cert/apmserver.key"

apm-server.auth.secret_token: "{{apm_secret_token}}"

apm-server.auth.api_key.enabled: true


output.elasticsearch:

  hosts: "{{elastic_hosts}}"

  protocol: "https"

  username: "{{elastic_username}}"

  password: "{{elastic_password}}"

  ssl.enabled: true

  ssl.verification_mode: none


2.将代理连接到 APM 服务器


1-2203291052454A.png


首先确认hosts参数,使用ansible在exporter_node类别进行批量部署 

hosts: exporter_node

升级权限,将权限提升到root

become: yes

  become_method: sudo

  become_user: root

执行apm-agent-tomcat剧本

 roles:

    - role: apm-agent-tomcat

定义变量,一般为了确保可用性,会将频繁变动的参数的变量写入其中

vars:

#   需要将下载的apm-agent包放置到tomcat的lib目录下

    tomcat_lib_dir: "/home/app02/tomcat3/apache-tomcat-9.0.56/lib"

#   将apm-agent的配置写入该文件中

    setenv: "/home/app02/tomcat3/apache-tomcat-9.0.56/bin/setenv.sh"

#   apm-agent jar包的版本

    version: "1.28.0"

#   自定义apm service名称

    service_name: "tomcat-test"

#   apm server地址 端口

    apm_server_url: "https://XXXXX:8200"

#   自定义token

    secret_token: "XXXXXXX"

#   tomcat的bin目录

    tomcat_bin_dir: "/home/app02/tomcat3/apache-tomcat-9.0.56/bin"

#   自定义apm环境名称

    apm_environment: "production"


2、Ansible  Roles说明


在roles目录下有apm-agent-tomcat的完整的执行逻辑


1-22032910534bI.png


Defaults文件里是默认变量 ,一般变量的优先级是playbook>vars>defaults

如果前面两个文件中没有变量,则defaults文件的默认值则会带入

变量将会写在main.yml


1-2203291053594G.png


Tasks文件中是执行的任务


1-220329105405612.png


在main.yml文件中进行任务的调用,首先执行download_tar_ball.yml下载软件包并进行安装,然后执行create_file.yml进行创建文件,如果没有setenv.sh文件则创建它,最后在setenv.sh加入配置,并启动进行apm agent进行服务的监控


1-220329105410218.png


Download_tar_ball.yml

---

- name: download   //任务名字

  become: true        //升权限

  get_url:               //获取下载包

url: "http://XXXXX/elk/apm-agent/elastic-apm-agent-{{ apm_version }}.jar" 

 //下载地址

    #url: "http://XXXX/elk/apm-agent/elastic-apm-agent-1.28.0.jar"

    dest: "{{ apm_path }}"    //下载包的存放路径

    mode: '0644'                 //权限 

    owner: "{{ apm_agent_tomcat_user }}"      //指定用户角色

    group: "{{ apm_agent_tomcat_group }}"    //指定组别

  register: _download_apm_agent                //注册下载任务

  until: _download_apm_agent is succeeded     //确定下载成功

  retries: 5                           //重试

  delay: 2

  check_mode: false



create_file.yml

---

- name: create apm-setenv.sh   //任务名称

  file:

     path: "{{ apm_setenv }}"        //文件创建路径

     state: touch                          //如果文件存在则更新,文件不存在则创建

     owner: "{{ apm_agent_tomcat_user }}"   //确定用户

     group: "{{ apm_agent_tomcat_group }}"  //确定组

     mode: 755   //赋予权限


add_config.yml

---

- name: add   //任务名

  blockinfile:                 //追加模块

    path: "{{ apm_setenv }}"   //文件路径

    create: true

    marker: "#{mark} Elastic Apm Config Block"

    block: |                                     //如下是追加内容

      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib

      export LD_LIBRARY_PATH

      Export CATALINA_OPTS="$CATALINA_OPTS -javaagent:{{ apm_path }}/elastic-apm-agent-{{ apm_version }}.jar"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.service_name={{ apm_service_name }}"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.application_packages={{ apm_app_packages }}"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.server_url={{ apm_server_url }}"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.secret_token={{ apm_secret_token }}"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.verify_server_cert=false"

      export CATALINA_OPTS="$CATALINA_OPTS -Delastic.apm.environment={{ apm_environment }}"

咨询电话
400-068-1180