• Products
    • View all products
    • Free trials
    • Buy online
  • Solutions
  • Resources
    • All Resources
    • Learning Hub
  • Trials
  • Services
    • Consulting Services
      • Overview
      • Microsoft Platform Services
      • Data Protection Services
      • Unified Endpoint Management
      • Performance Monitoring Services
      • Database Management Services
    • Educational Services
    • Support Services
  • Support
    • Support Home
    • By Product
      • All Products
      • AppAssure
      • Archive Manager
      • Change Auditor
      • Desktop Authority
      • DR Series
      • Foglight
      • KACE
      • Migration Manager
      • NetVault
      • Rapid Recovery
      • SharePlex
      • Toad
      • vRanger
    • Contact Support
      • Overview
      • Customer Service
      • Licensing Assistance
      • Renewal Assistance
      • Technical Support
    • Download Software
    • Knowledge Base
    • My Account
      • My Products
      • My Service Requests
      • My Licenses
      • My Groups
      • My Profile
    • Policies & Procedures
    • Consulting Services
      • Microsoft Platform Management
      • Data Protection
      • Unified Endpoint Management
      • Performance Monitoring
      • Database Management
    • Technical Documentation
    • Educational Services
    • User Forums
    • Video Tutorials
  • Partners
    • Overview
    • Partner Circle Log In
    • Become a Partner
    • Find a Partner
    • Technology Partners
    • Partner Community
    • Deal Alert
  • Blogs
    • IT Industry Insights
    • Quest Solution Blogs
      • Data Protection
      • Database Management
      • ITNinja
      • Microsoft Platform Management
      • Performance Monitoring
      • Toad World Blog
      • Unified Endpoint Management
  • Forums
  • 製品情報
    • すべての製品情報%E3%82%92見る
    • Change Auditor
    • Foglight
    • KACE
    • Metalogix
    • Migration Manager
    • Migrator for Notes to SharePoint
    • NetVault Backup
    • On Demand Migration for Email
    • QoreStor
    • Rapid Recovery
    • Recovery Manager
    • SharePlex
    • Spotlight
    • Toad
  • ソリューション
    • すべてのプラットフォームを見る
    • クラウド管理
    • GDPRコンプライアンス
    • データ保護
      • 概要
      • クラウド管理
      • ディザスタリカバリ
      • バックアップとリカバリ
      • Office 365 データ保護
      • 仮想化管理
      • 重複除外と複製
    • データベース管理
      • 概要
      • DevOps
      • データの準備と分析
      • データベースのクラウド移行
      • データベースパフォーマンス監視
      • データベース管理
      • データベース複製ソフトウェアツール
    • 統合エンドポイント管理
      • 概要
      • エンドポイントコンプライアンス
      • エンドポイントセキュリティ
      • エンドポイントの可視化
    • Microsoftプラットフォーム管理
      • 概要
      • ハイブリッドActive Directoryのセキュリティとガバナンス
      • Microsoftプラットフォームの移行計画と統合
      • セキュリティとコンプライアンス
      • 情報アーカイブおよびストレージ管理ソリューション
      • Windowsのバックアップとリカバリ
      • Microsoft Serverのパフォーマンスと可用性
      • レポート作成機能
      • グループポリシーと権限
    • パフォーマンス監視
  • サービス
    • コンサルティングサービス
      • 概要
      • Microsoftプラットフォーム管理
      • データ保護
      • 統合エンドポイント管理
      • パフォーマンス監視
      • データベース管理
    • トレーニングと認定資格
    • サポートサービス
  • サポート
    • サポートホーム
    • 製品で検索
      • All Products
      • AppAssure
      • Archive Manager
      • Change Auditor
      • Desktop Authority
      • DR Series
      • Foglight
      • KACE
      • Migration Manager
      • NetVault
      • Rapid Recovery
      • SharePlex
      • Toad
      • vRanger
    • お問い合わせ
      • すべて
      • カスタマサービス
      • ライセンス アシスタンス
      • 更新のアシス%E3%82%BFンス
      • 技術サポート
    • コミュ%E3%83%8Bティフォーラム
    • ソフトウェアのダウン%E3%83%ADード
    • ナ%E3%83%AC%E3%83%83ジ%E3%83%99ース
    • マイアカウント
      • マイ プロダクト
      • Myサービスリクエスト
      • マイ ライセンス
      • マイ グループ
      • マイ プ%E3%83%ADフ%E3%82%A1イル
    • ポリ%E3%82%B7ーおよび手順
    • コンサル%E3%83%86ィングサー%E3%83%93ス
      • Microsoftプラットフォーム管理
      • データ保護
      • 統合エンドポイント管理
      • パフォーマンス監視
      • データベース管理
    • リリースノートおよびガイド
    • 教育サービス
    • ビデオチュートリアル
  • トライアル
  • パートナー
    • 概要
    • Partner Circleへのログイン
    • パートナーになる
    • Find a Partner
    • パートナーコミュニティ
    • Deal Alert
  • コミュニティ
Quest Community
Quest Community
  • Site
  • User
  • Site
  • Search
  • User
Foglight
Foglight
Foglight Administrators Custom Agents - Introduction to Script Agents
  • -Foglight Administrators
    • A New Foglight Service Status Widget - Text with Colored Background
    • Adding APM views to an existing Foglight Java cartridge installation
    • Adventures in Agent Creation - Part 1
    • Adventures in Agent Creation - Part 2
    • Adventures in Agent Creation - Part 3
    • Anonymizing the Foglight End User Monitoring Solution
    • Another Foglight Service Status Widget - Colored Text
    • +Building a custom dashboard to summarize LogFilter alarms
    • Building a geo drag and drop Foglight dashboard for a service
    • Building Complex Schedules with Foglight
    • Busting Frame Busters in Foglight Experience Viewer (FxV)
    • Community Cartridge: Notification Management Cartridge
    • Compatibility for Navigation Timing API
    • Configuring Internet Explorer 9 (IE9), to best work with Foglight
    • Converting Foglight 4 Script Agents to Foglight 5
    • Creating Load Testing Scripts from FxM and FxV Session Data
    • Custom Agents - Introduction to Script Agents
    • Custom Agents - Script Agent Data Modeling and Units
    • Custom Foglight Dashboards: adding alarm colors to spinners, jelly beans and other gauges
    • Custom Script Agent 1: Leverage an Existing Monitoring Script To Push Data into Foglight
    • Custom Script Agent 2: Build a WCF Dashboard to View the Custom Agent Data
    • Custom Script Agent 3: Add a Metric and Build a WCF Chart to Display it
    • Custom Script Agent 4: Add a Metric to a Table
    • Customizing Foglight – Expert Services Discount Available for a Limited Time!
    • Customizing the out-of-the-box Host Status view
    • Dashboard speed-up
    • Deploying Two FglAMs to the Same Windows Host and running each as a Windows Service
    • Different Thresholds for Different Tablespaces
    • Different Thresholds for Different Tablespaces - Part 2
    • Emailing reports with the proper name and format
    • Everything You Need to Know About Udyam Registration
    • FGL IDE (Export Customizations & more)
    • Flexible, Cost-effective Remote Administration Services
    • Foglight 5 - Topology Localization
    • Foglight Advanced Administration Training - Limited Space for February 2012
    • Foglight APM Basics (Videos)
    • Foglight APM Features (videos)
    • +Foglight Best Practices
    • Foglight Best Practices (videos)
    • Foglight Best Practices Monthly Webcast – Sign Up for Session 1!
    • Foglight Best Practices: Dashboards and Reports Webcast Registration Open Now!
    • Foglight dashboard as a SharePoint WebPart
    • Foglight Dev Camp & Hackathon 2017
    • Foglight End User Management: Using Network TAPs versus a Switch SPAN Port
    • Foglight End User Service Availability Reporting, Foglight Experience Monitor or Foglight Transaction Recorder which one to use?
    • Foglight Event Synchronization Solution for HP Operations Manager Services Pack Available Now!
    • Foglight Experience Viewer (FxV) URL Search Shortcuts
    • Foglight Host OS Monitoring (videos)
    • Foglight iGoogle Gadget
    • Foglight nologinuser dashboard in SharePoint
    • Foglight Public Virtual Training Courses
    • Foglight Quickstart Services Offering
    • Foglight Reporting using Metric Queries or Groovy
    • Foglight Training Classes -- Public and Private Options Available
    • Foglight Training Packages with Free Healthcheck Services - Limited Time Offer
    • Fraud Support with FxV
    • FxM and Apache Proxy Server (X-Forwarded-Host)
    • FxM: IP Multicasting and Sessionizing
    • FxV Storage Tier Expansion & Analysis Repository Considerations
    • Getting the most out of Foglight's .NET Monitoring - Part 1
    • Getting the most out of Foglight's .NET Monitoring - Part 2: Agent Configuration Specifics and Best Practices
    • Getting the most out of Foglight's .NET Monitoring - Part 3: Monitoring a .NET Executable Application
    • HDIDT - View an Exported Real User Session File
    • How are your Java components processing?
    • How to Handle NTLM within UEM
    • Improve Organizational Adoption of Your APM Solution
    • January Foglight Best Practices Thursday, January 5 - Register Now!
    • Java APM
    • June 2012 Best Practices Webcast Open for Registration!
    • Migrating your Foglight Management Server
    • Monitoring .NET Request Memory Usage with Foglight
    • Monitoring an independent Java process using Foglight
    • Monitoring application availability using Foglight Utility Agents
    • New Foglight Services Packs Available
    • New Sizing Guide for FxM and FxV
    • New UEM Sizing Guide
    • Predicting the Impact of Moving a Guest to Another Host
    • +Quest Application Performance Monitoring (APM) Implementation Methodology
    • Reading a XML File with a powershell script agent
    • Really Simple (Foglight) Syndication
    • Services Section of Quest.com Gets a Facelift
    • Setting the value of a Registry Variable from the Command Line
    • SNMP trap variables in Foglight Alarms
    • The End-User as an Instrument...
    • Thoughts from the road - Foglight Java agent Tag and Follow
    • +Thoughts from the road – User session replay - YOU CAN ACTUALLY DO THAT???
    • Training Update - New Foglight Reporting Course Available
    • Understanding Foglight Metrics
    • Updates to Quest's Foglight Public Virtual Training Calendar
    • Use a Foglight to monitor itself
    • Use Foglight to Drive Business Performance
    • Use Foglight to monitor itself
    • User Experience Mgmt Overview
    • Using telnet or wget to check connectivity
    • Using the ConfigService API to setup agent properties (ASPs)
    • Utilizing MS Exchange distribution lists to help with user attribute maintenance
    • We've Redesigned SupportLink to Get You Answers Faster Than Ever - See for Yourself and Enter to Win an iPad!
    • [Case Scenario] - How to avoid duplicate rows when building a report with 5 min granular data
  • Custom Script Agent - Counting Files in a Windows Folder - How-To
  • Foglight Admin 101
  • Foglight monitoring application components running on Docker Containers
  • Foglight User 101
  • HabitatLux Fix Review – Trusted Home Maintenance Services in Dubai
  • Leather Wallets: The Timeless Accessory Every Man Should Own
  • Memory Utilization for all processes over X months
  • NetMonitor - Quick How-To Guide
  • Pantai Losari, sebuah ikon kota Makassar
  • Setting JBoss Server name and domain in Foglight
  • Setting Tomcat server name and domain in Foglight
  • testing a bug - Do not publish
  • WebMonitor - Quick How-To Guide
  • WebMonitor agent installation

Custom Agents - Introduction to Script Agents

By Geoff Vona

Tweet me @GeoffVona

  • How Script Agents Work
  • Script Agent Format
  • Script Agent Example
  • Script Agent Pitfalls: String Data
  • An Expanded Host Example
  • Errors You Might See
  • Conclusions

My last blog on Foglight 4 transition got me thinking about script agents. This blog will cover how the script agent format from Foglight 4 is supported in Foglight 5, and how we've extended that format to do some interesting new things.

How Script Agents Work

The Foglight Administrator's Guide has a good overview of the mechanics of script agents. Specifically Administration and Configuration Guide > Working with Foglight Tooling > Building Script Agents has the details. I highly recommend you refer to that section of the documentation when starting out with script agents. This blog isn't going to reprint those details - I'm more interested in focusing on why and outlining pitfalls.

Script agents work by running a prescribed script and processing the output. The actual agent is called JCollector. This agent runs the script, parses the output, and sends the resulting data table samples to Foglight.

There are two ways to make a script run:

  • Let JCollector call the script on the sampling interval. (Type 1)
  • Allow JCollector to call the script once. The script will then control the sampling interval. (Type 2)

Type 2 scripts are more complex because the script author must handle looping and honour the sampling interval from the server. This might be necessary if the length of the loop is important for doing things like calculating rates. For the purposes of getting started, use Type 1. This will minimize the complexity. Switch to Type 2 once you have a reason for hand-coding the loop.

As mentioned before, JCollector runs the script and parses the output sent to STDOUT. It then sends that output back to the server in the form of tables. There is a special CDT (Canonical Data Transformation) that knows how to interpret the data that is sent. That CDT knows how to deal with the table elements, mostly by parsing the field/column names. More on that later.

The standard model for a script agent is an agent containment model. An agent containment model means that the tables you send from your script agent are contained in an instance of your agent, and that agent is contained inside a host. This is usually good enough for getting started.

Script Agent Format

The output format is easy to understand:


TABLE TableName
START_SAMPLE_PERIOD
Field = Value
END_SAMPLE_PERIOD
END_TABLE

That's it. The TABLE directive tells Collector to start a new table of data with the specified name. A single script agent can emit multiple tables. START_SAMPLE_PERIOD and END_SAMPLE_PERIOD allow you to insert rows into that table. One or more rows are allowed. The Field = Value entry specifies the name of a table column and its value.

HostCPUMemoryDisk
tor017820 90 55 20
tor017899 78 35 43

...then the script agent results should look like this:

TABLE HostData
START_SAMPLE_PERIOD
Host = tor017820
CPU = 90
Memory = 55
Disk = 20
END_SAMPLE_PERIOD
START_SAMPLE_PERIOD
Host = tor017899
CPU = 78
Memory = 35
Disk = 4
END_SAMPLE_PERIOD
END_TABLE

This simple example demonstrates how data tables are translated into script agent format. However, it won't work because of the first column. We'll see why later in this article - it is a classic pitfall in working with script agents in Foglight 5, and deserves some airtime.

Script Agent Example

Here's a basic script agent example from Foglight 4 that we can run in Foglight 5.

@echo off
@if not "%ECHO%"==" " echo %ECHO%
@if not "%OS%"=="Windows_NT" goto EXIT
echo TABLE NT
echo START_SAMPLE_PERIOD
echo Field1 = 10
echo Field2 = 20
echo END_SAMPLE_PERIOD
echo END_TABLE

What's great about Foglight 5 is that we can simply upload that script into the server. The server will process the script and create a cartridge around it. The cartridge will contain the script, the Collector agent, and the CDT to process the data.

Here are the steps I like to use to get an agent running:

  1. Administration->Script Agent Builder to build the agent
  2. Agent Status -> Deploy Agent Package to push the agent to a particular host. In 5.5 the local agent manager running on the FMS is great for this kind of testing.
  3. Agent Status -> Create Agent to start the agent
  4. Once the agent is started, you have to activate it on the Agent Status page
  5. After a minute (default sampling frequency), you should be able to verify that the agent is working on the Agents page. I apply the With Agents filter to see hosts with agents. Eventually your host shows up with your agent name.
  1. If it doesn't show up, then go back to Agent Status and run Get Log for the agent to see what errors have occurred
  • To verify the data, select the agent on the Agents page and select the Data option. This will allow us to view the raw data. I like to use the Metric Analyzer view, because it tells me the value and type of the metrics.

That's it! You should try this with the sample script shown above. The result should be something like this:

Note that the script that I uploaded was called type1.bat. That's why the agent name is type1.bat. Foglight names the cartridge and agent after the script you upload. So, for obvious reasons, choose your script names wisely. 

Choose the Data option to see the data

As the image above shows, you're getting data into Foglight. Remember that this data is in a table inside the agent instance. If you want more of these, you need to create new agent instances.

Important point: iteration is built in to script agents. If you want to add a field to your script, make the changes, then run through the steps above. The version # will be automatically incremented. Note that you have to redeploy the agent package to the hosts, but you don't have to recreate the agent. The agent will automatically run the new script after upgrade. Try this out!

Script Agent Pitfalls: String Data

Remember the host data example from earlier in this article?

HostCPUMemoryDisk
tor017820 90 55 20
tor017899 78 35 43

To push this data into the server, we need a script that looks like this:

@echo off
@if not "%ECHO%"==" " echo %ECHO%
@if not "%OS%"=="Windows_NT" goto EXIT
echo TABLE HostData
echo START_SAMPLE_PERIOD
echo Host = tor017820
echo CPU = 90 echo Memory = 55
echo Disk = 20
echo END_SAMPLE_PERIOD
echo START_SAMPLE_PERIOD
echo Host = tor017899
echo CPU = 78
echo Memory = 35
echo Disk = 43
echo END_SAMPLE_PERIOD
echo END_TABLE

I put mine in a script called host.bat, created a script agent, deployed, created an agent, and waited. My agent showed up and collected data. Here's the result:

But wait a minute - where's the host name? I am missing data. In older versions of Foglight, the script agent may have failed outright. But why?

For this problem, I like to use the Log Analyzer under Administration. The pattern to look for with script agent errors is anything related to TopologyAdapter. Here's what I found:

2009-07-21 07:45:41.187 ERROR [Data-3-thread-13215] com.quest.nitro.service.agent.TopologyAdapter - The value provided for the metric could not be converted to a double.
Value = tor017820. Node path = [FglAM::host-1_0_0/CDT-1_0_0/topology-adapter.xml]/SPI:SPI/host:*/HostData:*/row:row/Host java.lang.NumberFormatException: For input string: "tor017820"

2009-07-21 07:45:41.187 ERROR [Data-3-thread-13216] com.quest.nitro.service.agent.TopologyAdapter - The value provided for the metric could not be converted to a double.
Value = tor017899. Node path = [FglAM::host-1_0_0/CDT-1_0_0/topology-adapter.xml]/SPI:SPI/host:*/HostData:*/row:row/Host java.lang.NumberFormatException: For input string: "tor017899"

What does this mean in plain language? It looks like the server is trying to convert the string host names I provided for the Host field into doubles. Why? By default, Foglight assumes all script agent entries are numeric time series data. In other words, Foglight is trying to convert these values to numbers. It isn't working, so the values are getting tossed.

This is different from Foglight 4. In Foglight 4, the values weren't typed at all. They got put into a table, and the typing occurred when a view was created to look at the data. In other words, Foglight 4 treated all values as strings. Foglight 5 wants to convert the values to something meaningful right away so the data can be rolled up and managed properly. To do that, we assumed that the vast majority of data would be metric data. (It is).

What this means is you need to do something special with your strings. The first thing we need to do is mark it as a String like this:

Host.String = tor017820

But there are actually a couple of options. What you choose will depend on what you want to accomplish. Here are the key questions:

Does the field uniquely identify the row of data? If it is, then we should mark it as an identity field. An identity field causes a new object instance to be created.

Does the field change frequently? If a string changes frequently, then it should be marked as an observation. That way Foglight will store a new value every sample, and won't track the changes. If a string changes infrequently, then it can be a property. A property has one value stored, and changes are tracked. To determine if something changes frequently, ask the question Could this change each sample period in a practical case?

This is tricky. To understand it, we need to expand our example.

An Expanded Host Example

Suppose we're actually gathering the following data about a host:

HostCPUMemoryDiskIP AddressState
tor017820 90 55 20 10.4.22.10 Up
tor017899 78 35 43 10.4.21.14 Down

It looks like we have three string values: Host, IP Address, and State. Let's apply the questions to each of the entries:

QuestionHost IP Address State
Identity Yes No No
Changes Frequently No No Yes

It is clear that Host is the name of a host, and therefore defines its identity. We want to see a new instance of the data for each unique value of Host.

IP Address, on the other hand, is not an identity property. It is unlikely to change with each sample frequency. In most environments, IP Addresses are leased long term. Marking IP Address as a property but not an observation makes sense.

Finally, the State field is not an identity property. However, it is possible that it could change from sample period to sample period. A host may not go down often, but when it does go down you want to know when. Tracking State as a string observation makes the most sense.

Here's the resulting script:

@echo off
@if not "%ECHO%"==" " echo %ECHO%
@if not "%OS%"=="Windows_NT" goto EXIT
echo TABLE ExpandedHost
echo START_SAMPLE_PERIOD
echo Host.String.id = tor017820
echo CPU = 90
echo Memory = 55
echo Disk = 20
echo IPAddress.String = 10.4.22.10
echo State.StringObservation.obs = Up
echo END_SAMPLE_PERIOD echo START_SAMPLE_PERIOD
echo Host.String.id = tor017899 echo CPU = 78
echo Memory = 35
echo Disk = 43 echo IPAddress.String = 10.4.21.14
echo State.StringObservation.obs = Down
echo END_SAMPLE_PERIOD
echo END_TABLE

Once you get this working, you'll feel cheated. What you'll see is exactly the same set of metrics - cpu, memory and disk. There will be no other indication that this is different from the original script unless you look closely:

Now we actually have two sets of entries - one for tor017820, and one for tor017899. What we never really noticed before is that we were getting two values of the same metrics into the same table before. Now we have two separate table entries - one for each host. So we've fixed at least one bug by adding Host.String.id to the script.

But where are IP Address and State? IP Address should be visible as a property. To see properties, select the Property Viewer view and scroll down:

That's great, we have accounted for two of our changes. But what happened to the State value?

Observations are a special class of metric. They are, by nature, harder to display. A time series metric of type double can be graphed. But a set of values for a String needs to be shown differently. In general, observations are a little more difficult to deal with than other types. You can still display them, write rules, etc - but you have to use special techniques. I'll cover these special techniques in a later blog. For now we're focused on getting data into the server in the right form. So where is State?

The Property Viewer will show it if we care to scroll down further:

As you can see, the state observation shows up with the other time series metrics on the property viewer. Unfortunately, he metric analyzer view does not currently show observation data. Recent requests from customers and from the field have ensured this will be considered for a future release.

Errors You Might See

If you see this in your management server log:

2009-07-21 09:05:43.593 ERROR An unexpected error occurred which may cause undesired behavior. You may want to contact Quest Software customer support if you see this error again: Canonical data transform failed: java.lang. IllegalStateException: Error processing incoming data for node path: [FglAM:: expandedhost-1_0_0/CDT-1_0_0/topology-adapter.xml]/SPI:SPI/expandedhost:*/HostData:*/row:row/State.String.obs: java.lang.IllegalArgumentException: Type 'foglight-5:String:1' does not have a property with the name 'current'

...then you've typed Field.String.obs instead of Field.StringObservation.obs. The StringObservation type is a special type that converts a string into a time series metric. You'll need to correct your script. This error is actually fatal to the processing of the agent data. You won't see any data pushed into the server - specifically, no agent entry on the Agents page.

If you see this:

2009-07-21 09:05:43.546 INFO The identity properties of topology type expanded host_Agent_Table_HostData have changed. The instances of this type will be renamed.

...then everything is okay.This happens because during the processing of the data, the server came across your identity declaration. This caused the server to change the definition of the table. You might see this as part of your iterations.

Conclusions

In this blog we've covered the basics of how script agents work. We've seen simple examples from Foglight 4. We've also spent some time reviewing problems that can occur with strings, and how to solve them. Hopefully this is enough for you to get started with script agents! If it isn't, more blogs with examples are coming.

  • script agents
  • Foglight Administration
  • custom agents
  • Script
  • foglight agents
Related
Recommended
  • Company
    • About Us
    • Buy
    • Contact Us
    • Careers
    • News
  • Resources
    • Industry Insights Blog
    • Communities
    • Customer Stories
    • Documents
    • Events
  • Support
    • Professional Services
    • Renew Support
    • Technical Support
    • Training & Certification
    • Support Services
  • Social Networks
    • Facebook
    • LinkedIn
    • Twitter
    • YouTube
  • © 2025 Quest Software Inc. ALL RIGHTS RESERVED.
  • Legal
  • Terms of Use
  • Privacy
  • Community Feedback & Support
  • Cookie Preference Center
  • 会社名
    • 会社情報
    • 購入
    • お問い合わせ
    • 採用情報
    • ニュース
  • リソース
    • ブログ
    • お客様の事例
    • ドキュメント
    • イベント
    • ビデオ
  • サポート
    • プロフェッショナルサービス
    • サポートの更新
    • テクニカルサポート
    • トレーニングと認定資格
    • サポートサービス
  • ソーシャルネットワーク
    • Facebook
    • Instagram
    • LinkedIn
    • Twitter
    • YouTube
  • © 2025 Quest Software Inc. ALL RIGHTS RESERVED.
  • 「法務」
  • ご利用規約
  • 個人情報保護方針
  • コミュニティのフィードバックとサポート