Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##################################################
- # This script automates the installation of #
- # the telegraf agent on Windows #
- # Last Updated: 05/04/2020 #
- # Author: Mahmoud Ghonim [email protected] #
- # Version: 1.1 #
- ##################################################
- ############ Params #############################
- param(
- [string]$service
- )
- ######### Functions #############################
- Add-Type -AssemblyName System.IO.Compression.FileSystem
- function Unzip
- {
- param([string]$zipfile, [string]$outpath)
- [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
- }
- # Telegraf agent configuration file
- $telegrafconf = @'
- # Telegraf Configuration
- #
- # Telegraf is entirely plugin driven. All metrics are gathered from the
- # declared inputs, and sent to the declared outputs.
- #
- # Plugins must be declared in here to be active.
- # To deactivate a plugin, comment out the name and any variables.
- #
- # Use 'telegraf -config telegraf.conf -test' to see what metrics a config
- # file would generate.
- #
- # Environment variables can be used anywhere in this config file, simply surround
- # them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"),
- # for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR})
- # Global tags can be specified here in key="value" format.
- [global_tags]
- # dc = "us-east-1" # will tag all metrics with dc=us-east-1
- # rack = "1a"
- ## Environment variables can be used as tags, and throughout the config file
- # user = "$USER"
- # Configuration for telegraf agent
- [agent]
- ## Default data collection interval for all inputs
- interval = "10s"
- ## Rounds collection interval to 'interval'
- ## ie, if interval="10s" then always collect on :00, :10, :20, etc.
- round_interval = true
- ## Telegraf will send metrics to outputs in batches of at most
- ## metric_batch_size metrics.
- ## This controls the size of writes that Telegraf sends to output plugins.
- metric_batch_size = 1000
- ## Maximum number of unwritten metrics per output. Increasing this value
- ## allows for longer periods of output downtime without dropping metrics at the
- ## cost of higher maximum memory usage.
- metric_buffer_limit = 10000
- ## Collection jitter is used to jitter the collection by a random amount.
- ## Each plugin will sleep for a random time within jitter before collecting.
- ## This can be used to avoid many plugins querying things like sysfs at the
- ## same time, which can have a measurable effect on the system.
- collection_jitter = "0s"
- ## Default flushing interval for all outputs. Maximum flush_interval will be
- ## flush_interval + flush_jitter
- flush_interval = "10s"
- ## Jitter the flush interval by a random amount. This is primarily to avoid
- ## large write spikes for users running a large number of telegraf instances.
- ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
- flush_jitter = "0s"
- ## By default or when set to "0s", precision will be set to the same
- ## timestamp order as the collection interval, with the maximum being 1s.
- ## ie, when interval = "10s", precision will be "1s"
- ## when interval = "250ms", precision will be "1ms"
- ## Precision will NOT be used for service inputs. It is up to each individual
- ## service input to set the timestamp at the appropriate precision.
- ## Valid time units are "ns", "us" (or "µs"), "ms", "s".
- precision = ""
- ## Log at debug level.
- # debug = false
- ## Log only error level messages.
- # quiet = false
- ## Log target controls the destination for logs and can be one of "file",
- ## "stderr" or, on Windows, "eventlog". When set to "file", the output file
- ## is determined by the "logfile" setting.
- # logtarget = "file"
- ## Name of the file to be logged to when using the "file" logtarget. If set to
- ## the empty string then logs are written to stderr.
- # logfile = ""
- ## The logfile will be rotated after the time interval specified. When set
- ## to 0 no time based rotation is performed. Logs are rotated only when
- ## written to, if there is no log activity rotation may be delayed.
- # logfile_rotation_interval = "0d"
- ## The logfile will be rotated when it becomes larger than the specified
- ## size. When set to 0 no size based rotation is performed.
- # logfile_rotation_max_size = "0MB"
- ## Maximum number of rotated archives to keep, any older logs are deleted.
- ## If set to -1, no archives are removed.
- # logfile_rotation_max_archives = 5
- ## Override default hostname, if empty use os.Hostname()
- hostname = ""
- ## If set to true, do no set the "host" tag in the telegraf agent.
- omit_hostname = false
- ###############################################################################
- # OUTPUT PLUGINS #
- ###############################################################################
- [[outputs.prometheus_client]]
- ## Address to listen on.
- listen = ":9126"
- ## Metric version controls the mapping from Telegraf metrics into
- ## Prometheus format. When using the prometheus input, use the same value in
- ## both plugins to ensure metrics are round-tripped without modification.
- ##
- ## example: metric_version = 1; deprecated in 1.13
- ## metric_version = 2; recommended version
- metric_version = 2
- ## Use HTTP Basic Authentication.
- # basic_username = "Foo"
- # basic_password = "Bar"
- ## If set, the IP Ranges which are allowed to access metrics.
- ## ex: ip_range = ["192.168.0.0/24", "192.168.1.0/30"]
- # ip_range = []
- ## Path to publish the metrics on.
- # path = "/metrics"
- ## Expiration interval for each metric. 0 == no expiration
- # expiration_interval = "60s"
- ## Collectors to enable, valid entries are "gocollector" and "process".
- ## If unset, both are enabled.
- # collectors_exclude = ["gocollector", "process"]
- ## Send string metrics as Prometheus labels.
- ## Unless set to false all string metrics will be sent as labels.
- # string_as_label = true
- ## If set, enable TLS with the given certificate.
- # tls_cert = "/etc/ssl/telegraf.crt"
- # tls_key = "/etc/ssl/telegraf.key"
- ## Set one or more allowed client CA certificate file names to
- ## enable mutually authenticated TLS connections
- # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"]
- ## Export metric collection time.
- # export_timestamp = false
- '@
- # Infrastructure configuration file
- $infrastructureconf = @'
- ###############################################################################
- # INPUT PLUGINS #
- ###############################################################################
- # Windows Performance Counters plugin.
- # These are the recommended method of monitoring system metrics on windows,
- # as the regular system plugins (inputs.cpu, inputs.mem, etc.) rely on WMI,
- # which utilize more system resources.
- #
- # See more configuration examples at:
- # https://github.com/influxdata/telegraf/tree/master/plugins/inputs/win_perf_counters
- [[inputs.win_perf_counters]]
- [[inputs.win_perf_counters.object]]
- # Processor usage, alternative to native, reports on a per core.
- ObjectName = "Processor"
- Instances = ["*"]
- Counters = [
- "% Idle Time",
- "% Interrupt Time",
- "% Privileged Time",
- "% User Time",
- "% Processor Time",
- "% DPC Time",
- ]
- Measurement = "win_cpu"
- # Set to true to include _Total instance when querying for all (*).
- IncludeTotal=true
- [[inputs.win_perf_counters.object]]
- # Disk times and queues
- ObjectName = "LogicalDisk"
- Instances = ["*"]
- Counters = [
- "% Idle Time",
- "% Disk Time",
- "% Disk Read Time",
- "% Disk Write Time",
- "% Free Space",
- "Current Disk Queue Length",
- "Free Megabytes",
- ]
- Measurement = "win_disk"
- # Set to true to include _Total instance when querying for all (*).
- #IncludeTotal=false
- [[inputs.win_perf_counters.object]]
- ObjectName = "PhysicalDisk"
- Instances = ["*"]
- Counters = [
- "Disk Read Bytes/sec",
- "Disk Write Bytes/sec",
- "Current Disk Queue Length",
- "Disk Reads/sec",
- "Disk Writes/sec",
- "% Disk Time",
- "% Disk Read Time",
- "% Disk Write Time",
- ]
- Measurement = "win_diskio"
- [[inputs.win_perf_counters.object]]
- ObjectName = "Network Interface"
- Instances = ["*"]
- Counters = [
- "Bytes Received/sec",
- "Bytes Sent/sec",
- "Packets Received/sec",
- "Packets Sent/sec",
- "Packets Received Discarded",
- "Packets Outbound Discarded",
- "Packets Received Errors",
- "Packets Outbound Errors",
- ]
- Measurement = "win_net"
- [[inputs.win_perf_counters.object]]
- ObjectName = "System"
- Counters = [
- "Context Switches/sec",
- "System Calls/sec",
- "Processor Queue Length",
- "System Up Time",
- ]
- Instances = ["------"]
- Measurement = "win_system"
- # Set to true to include _Total instance when querying for all (*).
- #IncludeTotal=false
- [[inputs.win_perf_counters.object]]
- # Example query where the Instance portion must be removed to get data back,
- # such as from the Memory object.
- ObjectName = "Memory"
- Counters = [
- "Available Bytes",
- "Cache Faults/sec",
- "Demand Zero Faults/sec",
- "Page Faults/sec",
- "Pages/sec",
- "Transition Faults/sec",
- "Pool Nonpaged Bytes",
- "Pool Paged Bytes",
- "Standby Cache Reserve Bytes",
- "Standby Cache Normal Priority Bytes",
- "Standby Cache Core Bytes",
- ]
- # Use 6 x - to remove the Instance bit from the query.
- Instances = ["------"]
- Measurement = "win_mem"
- # Set to true to include _Total instance when querying for all (*).
- #IncludeTotal=false
- [[inputs.win_perf_counters.object]]
- # Example query where the Instance portion must be removed to get data back,
- # such as from the Paging File object.
- ObjectName = "Paging File"
- Counters = [
- "% Usage",
- ]
- Instances = ["_Total"]
- Measurement = "win_swap"
- # Windows system plugins using WMI (disabled by default, using
- # win_perf_counters over WMI is recommended)
- # # Read metrics about cpu usage
- [[inputs.cpu]]
- # ## Whether to report per-cpu stats or not
- percpu = false
- # ## Whether to report total system cpu stats or not
- totalcpu = true
- # ## If true, collect raw CPU time metrics.
- collect_cpu_time = false
- # ## If true, compute and report the sum of all non-idle CPU states.
- # report_active = false
- # # Read metrics about disk usage by mount point
- [[inputs.disk]]
- # ## By default stats will be gathered for all mount points.
- # ## Set mount_points will restrict the stats to only the specified mount points.
- # # mount_points = ["/"]
- #
- # ## Ignore mount points by filesystem type.
- # ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]
- # # Read metrics about disk IO by device
- [[inputs.diskio]]
- # ## By default, telegraf will gather stats for all devices including
- # ## disk partitions.
- # ## Setting devices will restrict the stats to the specified devices.
- # # devices = ["sda", "sdb", "vd*"]
- # ## Uncomment the following line if you need disk serial numbers.
- # # skip_serial_number = false
- # #
- # ## On systems which support it, device metadata can be added in the form of
- # ## tags.
- # ## Currently only Linux is supported via udev properties. You can view
- # ## available properties for a device by running:
- # ## 'udevadm info -q property -n /dev/sda'
- # # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"]
- # #
- # ## Using the same metadata source as device_tags, you can also customize the
- # ## name of the device via templates.
- # ## The 'name_templates' parameter is a list of templates to try and apply to
- # ## the device. The template may contain variables in the form of '$PROPERTY' or
- # ## '${PROPERTY}'. The first template which does not contain any variables not
- # ## present for the device is used as the device name tag.
- # ## The typical use case is for LVM volumes, to get the VG/LV name instead of
- # ## the near-meaningless DM-0 name.
- # # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]
- # # Read metrics about memory usage
- [[inputs.mem]]
- # # no configuration
- # # Read metrics about swap memory usage
- [[inputs.swap]]
- # # no configuration
- # # Read metrics about swap memory usage
- [[inputs.win_services]]
- # no configuration
- '@
- # Infrastructure configuration file
- $activedirectoryconf = @'
- ###############################################################################
- # INPUT PLUGINS #
- ###############################################################################
- [[inputs.win_perf_counters]]
- [inputs.win_perf_counters.tags]
- monitorgroup = "ActiveDirectory"
- [[inputs.win_perf_counters.object]]
- ObjectName = "DirectoryServices"
- Instances = ["*"]
- Counters = ["Base Searches/sec","Database adds/sec","Database deletes/sec","Database modifys/sec","Database recycles/sec","LDAP Client Sessions","LDAP Searches/sec","LDAP Writes/sec"]
- Measurement = "win_ad" # Set an alternative measurement to win_perf_counters if wanted.
- #Instances = [""] # Gathers all instances by default, specify to only gather these
- #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).
- [[inputs.win_perf_counters.object]]
- ObjectName = "Security System-Wide Statistics"
- Instances = ["*"]
- Counters = ["NTLM Authentications","Kerberos Authentications","Digest Authentications"]
- Measurement = "win_ad"
- #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).
- [[inputs.win_perf_counters.object]]
- ObjectName = "Database"
- Instances = ["*"]
- Counters = ["Database Cache % Hit","Database Cache Page Fault Stalls/sec","Database Cache Page Faults/sec","Database Cache Size"]
- Measurement = "win_db"
- #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).
- '@
- $installdir="C:\windows\Temp"
- # Download the agent zip file
- cd $installdir
- #set tls to 1.2
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- wget https://dl.influxdata.com/telegraf/releases/telegraf-1.14.0_windows_amd64.zip -OutFile telegraf-1.14.0_windows_amd64.zip
- # Expand Archive into Program Files
- Unzip $installdir\telegraf-1.14.0_windows_amd64.zip "C:\Program Files\"
- # Telegraf agent configuration file
- Set-Content -Path 'C:\Program Files\telegraf\telegraf.conf' -Value $telegrafconf
- # Make the agents conf.d
- mkdir 'C:\Program Files\telegraf\conf'
- # Infrastructure configuration file
- Set-Content -Path 'C:\Program Files\telegraf\conf\infrastructure.conf' -Value $infrastructureconf
- if($service){
- if($service -eq "activedirectory"){
- # Active Directory configuration file
- Set-Content -Path 'C:\Program Files\telegraf\conf\activedirctory.conf' -Value $activedirectoryconf
- }
- }
- # Install Telegraf Agent
- cd "C:\Program Files\telegraf\"
- .\telegraf --service install --config-directory 'C:\Program Files\telegraf\conf'
- # Start Telegraf Agent
- net start telegraf
Advertisement
Add Comment
Please, Sign In to add comment