Elastic APM not running when documentation is followed

Hi,

I have a cluster using the elasticsearch version 6.4.0
I want to configure Elastic APM for my Python agent using Flask.

I have followed the process mentioned in this link

Do I have to mention the version of my elastic cluster(6.4.0) in .repo extension at location /etc/yum.repos.d/
According to the documentation it says the below

[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
  1. When I run the below command using the above text in .repo file it installs 6.8.x version of apm-server. Will this be okay since my cluster version is 6.4.0. -
    sudo yum install apm-server

Also, when I start the apm with version 6.8.x, it fails to start.
The command I used was -

/apm-server -e -E output.elasticsearch.hosts=172.31.0.172:9200 -E apm-server.host=localhost:8200

172.31.0.72 is the IP address of my Elasticsearch Cluster.
The response I received for the above command was -

zsh: no such file or directory: ./apm-server

Does the apm-server directory gets generated automatically in some particular place or Do I have to create it myself?

2.Further when I mention version 6.4.0 in .repo extension file, installation command fails providing output as follows -

Elastic repository for 6.4.0 packages                                                                                         4.4  B/s |  78  B     00:17    
Error: Failed to download metadata for repo 'elastic-6.4.0': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
Ignoring repositories: elastic-6.4.0

Package apm-server-6.8.11-1.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

I understand from the above response that 6.8.11 has already been installed. How do i uninstall it. I have install using yum.

Please provide your valuable inputs to my few questions.

Thanks in advance.

@elastic
@dadoonet

Hi @Nikesh,
if you'd like to install a specific version and not the latest 6.x version you can specify that for the install command, e.g. yum install apm-server-6.4.3.
For uninstalling a package you can make use of the regular yum remove command.
When installing with yum you would start the server with apm-server -e (no trailing /).

I just quickly tried installing the latest 6.4 version and it worked well.

However, APM Server 6.8 is expected to work with the Elastic Stack version 6.4; if possible I'd install an APM-Server version >= 6.6 to be compatible with the latest python agent, see agent/server compatibility.

HI @simitt,
Thanks for the response.
I have installed apm-server-6.4.3 as per your instructions and ran the command -

sudo apm-server -e

Now I am not able to see it get reflected on Kibana UI - APM.
However I can see indices created with names apm-*


Above is the image from Monitoring Page of Kibana. Please Ignore the yellow status.

Where am I going wrong?

I further see that APM Server Status in APM Page of Kibana with below attached status.

In addition I also noticed that I am not able to create index pattern in Management page of Kibana UI. Attaching the screen shot of the same-


Please notice the text at the top in Red Color.

I believe i can start working on APM Agents after ensuring Apm-server is in sync with Kibana.

Thanks in advance.

I am also adding apm-server.yml (partial due to character limit) for your reference below-
APM-SERVER.YML

 ################### APM Server Configuration #########################
############################# APM Server ######################################
apm-server:
  # Defines the host and port the server is listening on.  use "unix:/path/to.sock" to listen on a unix domain socket.
  host: "172.31.0.117:8200"
  # Maximum permitted size in bytes of an unzipped request accepted by the server to be processed.
  #max_unzipped_size: 31457280
  # Maximum permitted size in bytes of a request's header accepted by the server to be processed.
  #max_header_size: 1048576
  # Maximum duration request will be queued before being read.
  #max_request_queue_time: 2s
  # Maximum permitted duration for reading an entire request.
  #read_timeout: 30s
  # Maximum permitted duration for writing a response.
  #write_timeout: 30s
  # Maximum duration in seconds before releasing resources when shutting down the server.
  #shutdown_timeout: 5s
  # Maximum number of requests permitted to be sent to the server concurrently.
  #concurrent_requests: 5
  # Maximum number of new connections to accept simultaneously (0 means unlimited)
  # max_connections: 0
  # Instrumentation support for the server's HTTP endpoints and event publisher.
  #instrumentation:
    # Set to true to enable instrumentation of the APM server itself.
    #enabled: false
    # Environment in which the APM Server is running on (eg: staging, production, etc.)
    #environment: ""

  # Authorization token to be checked. If a token is set here the agents must
  # send their token in the following format: Authorization: Bearer <secret-token>.
  # It is recommended to use an authorization token in combination with SSL enabled,
  # and save the token in the beats keystore.
  #secret_token:
  #ssl.enabled: false
  #ssl.certificate : "path/to/cert"
  #ssl.key : "path/to/private_key"
  # It is recommended to use the provided keystore instead of entering the passphrase in plain text.
  #ssl.key_passphrase: ""

  #rum:
    # To enable real user monitoring (RUM) support set this to true.
    #enabled: false

    # Rate limit per second and IP address for requests sent to the RUM endpoint.
    #rate_limit: 10

    # Comma separated list of permitted origins for real user monitoring. 
    # User-agents will send an origin header that will be validated against this list.
    # An origin is made of a protocol scheme, host and port, without the url path.
    # Allowed origins in this setting can have * to match anything (eg.: http://*.example.com)
    # If an item in the list is a single '*', everything will be allowed
    #allow_origins : ['*']

    # Regexp to be matched against a stacktrace frame's `file_name` and `abs_path` attributes.
    # If the regexp matches, the stacktrace frame is considered to be a library frame.
    #library_pattern: "node_modules|bower_components|~"

    # Regexp to be matched against a stacktrace frame's `file_name`.
    # If the regexp matches, the stacktrace frame is not used for calculating error groups.
    # The default pattern excludes stacktrace frames that have a filename starting with '/webpack'
    #exclude_from_grouping: "^/webpack"

    # If a source map has previously been uploaded, source mapping is automatically applied
    # to all error and transaction documents sent to the RUM endpoint.
    #source_mapping:

      # Source maps are always fetched from Elasticsearch, by default using the output.elasticsearch configuration.
      # A different instance must be configured when using any other output.
      # This setting only affects sourcemap reads - the output determines where sourcemaps are written.
      #elasticsearch:
        # Array of hosts to connect to.
        # Scheme and port can be left out and will be set to the default (http and 9200)
        # In case you specify and additional path, the scheme is required: http://localhost:9200/path
        # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200
        # hosts: ["localhost:9200"]

        # Optional protocol and basic auth credentials.
        #protocol: "https"
        #username: "elastic"
        #password: "changeme"

      # The `cache.expiration` determines how long a source map should be cached before fetching it again from Elasticsearch.
      # Note that values configured without a time unit will be interpreted as seconds.
      #cache:
        #expiration: 5m

      # Source maps are stored in a seperate index.
      # If the default index pattern for source maps at 'outputs.elasticsearch.indices'
      # is changed, a matching index pattern needs to be specified here.
      #index_pattern: "apm-*-sourcemap*"

  # If set to true, APM Server augments data received by the agent with the original IP of the backend server,
  # or the IP and User Agent of the real user (RUM requests). It defaults to true.
  #capture_personal_data: true

  # golang expvar support - https://golang.org/pkg/expvar/
  #expvar:
    # Set to true to Expose expvar
    #enabled: false

    # Url to expose expvar
    #url: "/debug/vars"

  # Experimental Metrics endpoint
  #metrics:
    # Set to false to disable the metrics endpoint
    #enabled: true

#================================ General ======================================

# Internal queue configuration for buffering events to be published.
#queue:
  # Queue type by name (default 'mem')
  # The memory queue will present all available events (up to the outputs
  # bulk_max_size) to the output, the moment the output is ready to server
  # another batch of events.
  #mem:
    # Max number of events the queue can buffer.
    #events: 4096

    # Hints the minimum number of events stored in the queue,
    # before providing a batch of events to the outputs.
    # A value of 0 (the default) ensures events are immediately available
    # to be sent to the outputs.
    #flush.min_events: 2048

    # Maximum duration after which events are available to the outputs,
    # if the number of events stored in the queue is < min_flush_events.
    #flush.timeout: 1s

# Sets the maximum number of CPUs that can be executing simultaneously. The
# default is the number of logical CPUs available in the system.
#max_procs:
#============================== Deprecated: Dashboards =====================================
#
# Deprecated: Loading dashboards from the APM Server into Kibana is deprecated from 6.4 on.
#             We suggest to use the Kibana UI to load APM Server dashboards and index pattern instead.
#
# These settings control loading the sample dashboards to the Kibana index. Loading
# the dashboards are disabled by default and can be enabled either by setting the
# options here, or by using the `-setup` CLI flag or the `setup` command.
# setup.dashboards.enabled: true
# The URL from where to download the dashboards archive. It is used instead of
# the directory if it has a value.
#setup.dashboards.url:
# The name of the Kibana index to use for setting the configuration. Default is ".kibana"
#setup.dashboards.kibana_index: .kibana

# The Elasticsearch index name. This overwrites the index name defined in the
# dashboards and index pattern. Example: testbeat-*
# The dashboards.index needs to be changed in case the elasticsearch index pattern is modified.
#setup.dashboards.index:
#setup.dashboards.always_kibana: false
#setup.dashboards.retry.enabled: false

# Duration interval between Kibana connection retries.
#setup.dashboards.retry.interval: 1s

# Maximum number of retries before exiting with an error, 0 for unlimited retrying.
#setup.dashboards.retry.maximum: 0


#============================== Deprecated: Kibana =====================================

# Deprecated: Starting with APM Server version 6.4, loading dashboards and index pattern 
#             from the APM Server into Kibana is deprecated.
#             We suggest to use the Kibana UI to load APM Server dashboards and index pattern instead.
#
#             Setting up a Kibana endpoint is not necessary when loading the index pattern and dashboards via the UI.

setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
        host: "172.31.0.117:5601"

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"

  # Optional HTTP Path
  #path: ""

  # Use SSL settings for HTTPS. Default is false.
  #ssl.enabled: false

  # Configure SSL verification mode. If `none` is configured, all server hosts
  # and certificates will be accepted. In this mode, SSL based connections are
  # susceptible to man-in-the-middle attacks. Use only for testing. Default is
  # `full`.
  #ssl.verification_mode: full

  # List of supported/valid TLS versions. By default all TLS versions 1.0 up to
  # 1.2 are enabled.
  #ssl.supported_protocols: [TLSv1.0, TLSv1.1, TLSv1.2]

  # SSL configuration. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

  # Optional passphrase for decrypting the Certificate Key.
  # It is recommended to use the provided keystore instead of entering the passphrase in plain text.
  #ssl.key_passphrase: ''

  # Configure cipher suites to be used for SSL connections
  #ssl.cipher_suites: []

  # Configure curve types for ECDHE based cipher suites
  #ssl.curve_types: []


#================================ Outputs =====================================

# Configure what output to use when sending the data collected by the beat.

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  # Scheme and port can be left out and will be set to the default (http and 9200)
  # In case you specify and additional path, the scheme is required: http://localhost:9200/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200
  hosts: ["172.31.0.173:9200"]
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"
  # Dictionary of HTTP parameters to pass within the url with index operations.
  #parameters:
    #param1: value1
    #param2: value2
  # Number of workers per Elasticsearch host.
  #worker: 1
  # By using the configuration below, apm documents are stored to separate indices,
  # depending on their `processor.event`:
  # - error
  # - transaction
  # - span
  # - sourcemap
  #
  # The indices are all prefixed with `apm-%{[beat.version]}`.
  # To allow managing indices based on their age, all indices (except for sourcemaps)
  # end with the information of the day they got indexed.
  # e.g. "apm-6.3.0-transaction-2018.03.20"
  #index: "apm-%{[beat.version]}-%{+yyyy.MM.dd}"
  indices:
    - index: "apm-%{[beat.version]}-sourcemap"
      when.contains:
        processor.event: "sourcemap"

    - index: "apm-%{[beat.version]}-error-%{+yyyy.MM.dd}"
      when.contains:
        processor.event: "error"

    - index: "apm-%{[beat.version]}-transaction-%{+yyyy.MM.dd}"
      when.contains:
        processor.event: "transaction"

    - index: "apm-%{[beat.version]}-span-%{+yyyy.MM.dd}"
      when.contains:
        processor.event: "span"

    - index: "apm-%{[beat.version]}-metric-%{+yyyy.MM.dd}"
      when.contains:
        processor.event: "metric"

    - index: "apm-%{[beat.version]}-onboarding-%{+yyyy.MM.dd}"
      when.contains:
        processor.event: "onboarding"

Also attaching Kibana.yml file below -

2. **Kibana.yml** - 

    # Kibana is served by a back end server. This setting specifies the port to use.
    #server.port: 5601

    # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
    # The default is 'localhost', which usually means remote machines will not be able to connect.
    # To allow connections from remote users, set this parameter to a non-loopback address.
    server.host: "172.31.0.117"

    # Enables you to specify a path to mount Kibana at if you are running behind a proxy.
    # Use the `server.rewriteBasePath` setting to tell Kibana if it should remove the basePath
    # from requests it receives, and to prevent a deprecation warning at startup.
    # This setting cannot end in a slash.
    #server.basePath: ""

    # Specifies whether Kibana should rewrite requests that are prefixed with
    # `server.basePath` or require that they are rewritten by your reverse proxy.
    # This setting was effectively always `false` before Kibana 6.3 and will
    # default to `true` starting in Kibana 7.0.
    #server.rewriteBasePath: false

    # The maximum payload size in bytes for incoming server requests.
    #server.maxPayloadBytes: 1048576
    server.maxPayloadBytes: 1073741824
    # The Kibana server's name.  This is used for display purposes.
    #server.name: "your-hostname"

    # The URL of the Elasticsearch instance to use for all your queries.
    elasticsearch.url: "http://172.31.0.117:9200"
    # When this setting's value is true Kibana uses the hostname specified in the server.host
    # setting. When the value of this setting is false, Kibana uses the hostname of the host
    # that connects to this Kibana instance.
    #elasticsearch.preserveHost: true

    # Kibana uses an index in Elasticsearch to store saved searches, visualizations and
    # dashboards. Kibana creates a new index if the index doesn't already exist.
    #kibana.index: ".kibana"

    # The default application to load.
    #kibana.defaultAppId: "home"

    # If your Elasticsearch is protected with basic authentication, these settings provide
    # the username and password that the Kibana server uses to perform maintenance on the Kibana
    # index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
    # is proxied through the Kibana server.
    #elasticsearch.username: "user"
    #elasticsearch.password: "pass"

    # Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively.
    # These settings enable SSL for outgoing requests from the Kibana server to the browser.
    #server.ssl.enabled: false
    #server.ssl.certificate: /path/to/your/server.crt
    #server.ssl.key: /path/to/your/server.key

    # Optional settings that provide the paths to the PEM-format SSL certificate and key files.
    # These files validate that your Elasticsearch backend uses the same key files.
    #elasticsearch.ssl.certificate: /path/to/your/client.crt
    #elasticsearch.ssl.key: /path/to/your/client.key

    # Optional setting that enables you to specify a path to the PEM file for the certificate
    # authority for your Elasticsearch instance.
    #elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]

    # To disregard the validity of SSL certificates, change this setting's value to 'none'.
    #elasticsearch.ssl.verificationMode: full

    # Time in milliseconds to wait for Elasticsearch to respond to pings. Defaults to the value of
    # the elasticsearch.requestTimeout setting.
    #elasticsearch.pingTimeout: 1500

    # Time in milliseconds to wait for responses from the back end or Elasticsearch. This value
    # must be a positive integer.
    #elasticsearch.requestTimeout: 30000

    # List of Kibana client-side headers to send to Elasticsearch. To send *no* client-side
    # headers, set this value to [] (an empty list).
    #elasticsearch.requestHeadersWhitelist: [ authorization ]

    # Header names and values that are sent to Elasticsearch. Any custom headers cannot be overwritten
    # by client-side headers, regardless of the elasticsearch.requestHeadersWhitelist configuration.
    #elasticsearch.customHeaders: {}

    # Time in milliseconds for Elasticsearch to wait for responses from shards. Set to 0 to disable.
    #elasticsearch.shardTimeout: 30000

    # Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying.
    #elasticsearch.startupTimeout: 5000

    # Logs queries sent to Elasticsearch. Requires logging.verbose set to true.
    #elasticsearch.logQueries: false

    # Specifies the path where Kibana creates the process ID file.
    #pid.file: /var/run/kibana.pid

    # Enables you specify a file where Kibana stores log output.
    #logging.dest: stdout

    # Set the value of this setting to true to suppress all logging output.
    #logging.silent: false

    # Set the value of this setting to true to suppress all logging output other than error messages.
    #logging.quiet: false

    # Set the value of this setting to true to log all events, including system usage information
    # and all requests.
    #logging.verbose: false

    # Set the interval in milliseconds to sample system and process performance
    # metrics. Minimum is 100ms. Defaults to 5000.
    #ops.interval: 5000

    # The default locale. This locale can be used in certain circumstances to substitute any missing
    # translations.
    #i18n.defaultLocale: "en"
    #
    apm_oss.errorIndices: apm-*
    apm_oss.spanIndices: apm-*
    apm_oss.transactionIndices: apm-*
    apm_oss.onboardingIndices: apm-* 


I have added the below parameters in Kibana.yml file too.

    apm_oss.errorIndices: apm-*
    apm_oss.spanIndices: apm-*
    apm_oss.transactionIndices: apm-*
    apm_oss.onboardingIndices: apm-*

It's probably a good idea to run apm-server setup -e which takes care of index template, Kibana index pattern setup etc. before you start ingesting data from the agents.

For verifying that APM-Server/Kibana/ES setup works you could try ingesting some testdata manually, e.g. via a curl command similar to curl -i -H "Content-type: application/json" --data-binary @testdata.json <host:port>/v1/transactions

Hi @simitt
Thanks for the quick response.
I ran the command apm-server setup -e and received the response -

2020-08-06T20:48:56.154+0530	INFO	instance/beat.go:544	Home path: [/usr/share/apm-server] Config path: [/etc/apm-server] Data path: [/var/lib/apm-server] Logs path: [/var/log/apm-server]
2020-08-06T20:48:56.154+0530	INFO	instance/beat.go:551	Beat UUID: fc571408-c753-4e67-82d5-151ef0f19d7f
2020-08-06T20:48:56.154+0530	INFO	[beat]	instance/beat.go:768	Beat info	{"system_info": {"beat": {"path": {"config": "/etc/apm-server", "data": "/var/lib/apm-server", "home": "/usr/share/apm-server", "logs": "/var/log/apm-server"}, "type": "apm-server", "uuid": "fc571408-c753-4e67-82d5-151ef0f19d7f"}}}
2020-08-06T20:48:56.154+0530	INFO	[beat]	instance/beat.go:777	Build info	{"system_info": {"build": {"commit": "59fbf0b6146ca5c50a94d1c435d0cf704e5b2a3f", "libbeat": "6.4.0", "time": "2018-08-17T22:13:22.000Z", "version": "6.4.0"}}}
2020-08-06T20:48:56.154+0530	INFO	[beat]	instance/beat.go:780	Go runtime info	{"system_info": {"go": {"os":"linux","arch":"amd64","max_procs":6,"version":"go1.10.3"}}}
2020-08-06T20:48:56.157+0530	INFO	[beat]	instance/beat.go:813	Process info	{"system_info": {"process": {"capabilities": {"inheritable":null,"permitted":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend","audit_read"],"effective":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend","audit_read"],"bounding":["chown","dac_override","dac_read_search","fowner","fsetid","kill","setgid","setuid","setpcap","linux_immutable","net_bind_service","net_broadcast","net_admin","net_raw","ipc_lock","ipc_owner","sys_module","sys_rawio","sys_chroot","sys_ptrace","sys_pacct","sys_admin","sys_boot","sys_nice","sys_resource","sys_time","sys_tty_config","mknod","lease","audit_write","audit_control","setfcap","mac_override","mac_admin","syslog","wake_alarm","block_suspend","audit_read"],"ambient":null}, "cwd": "/home/nikesh.manjunath", "exe": "/usr/share/apm-server/bin/apm-server", "name": "apm-server", "pid": 19734, "ppid": 19732, "seccomp": {"mode":"disabled","no_new_privs":false}, "start_time": "2020-08-06T20:48:55.130+0530"}}}
2020-08-06T20:48:56.157+0530	INFO	instance/beat.go:273	Setup Beat: apm-server; Version: 6.4.0
2020-08-06T20:48:56.157+0530	INFO	elasticsearch/client.go:163	Elasticsearch url: http://172.31.0.173:9200
2020-08-06T20:48:56.158+0530	INFO	pipeline/module.go:98	Beat name: localhost.localdomain
2020-08-06T20:48:56.158+0530	INFO	elasticsearch/client.go:163	Elasticsearch url: http://172.31.0.173:9200
2020-08-06T20:48:56.161+0530	INFO	elasticsearch/client.go:708	Connected to Elasticsearch version 6.4.0
2020-08-06T20:48:56.169+0530	INFO	template/load.go:129	Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2020-08-06T20:48:56.169+0530	INFO	elasticsearch/client.go:163	Elasticsearch url: http://172.31.0.173:9200
2020-08-06T20:48:56.173+0530	INFO	elasticsearch/client.go:708	Connected to Elasticsearch version 6.4.0
2020-08-06T20:48:56.174+0530	INFO	kibana/client.go:113	Kibana url: http://172.31.0.117:5601
2020-08-06T20:48:57.721+0530	INFO	instance/beat.go:659	Kibana dashboards successfully loaded.
Loaded dashboards

Can you please tell me IP and port of which instance should go here? Kibana or APM or Elasticsearch?

I assume the format would be something like the below and please correct me if I am wrong -

curl -i -H "Content-type: application/json" --data-binary '{"service": { "name": "service1", "agent": { "name": "python", "version": "1.0"} }, "transactions": [ { "id": "945254c5-67a5-417e-8a4e-aa29efcbfb79", "type": "request", "duration": 32.592981} ]}' <172.31.0.117:8200>/v1/transactions

The suggested curl command was meant to ingest some testdata to Elasticsearch through your APM Server, and viewing these data in Kibana, allowing you to verify that the setup works. Therefore you would use the APM-Server host and port as endpoint, e.g. for localhost 127.0.0.1:8200/v1/transactions.

Please don't ping people that aren't already a part of your thread like this :slight_smile:

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.