> ## Documentation Index
> Fetch the complete documentation index at: https://otel.fyi/llms.txt
> Use this file to discover all available pages before exploring further.

# Processors

> OpenTelemetry Processors components

export const ComponentList = ({items, type, columns}) => {
  const [search, setSearch] = React.useState("");
  const filtered = items.filter(item => item.name.toLowerCase().includes(search.toLowerCase()));
  const badgeColors = {
    stable: {
      bg: "rgba(34, 197, 94, 0.1)",
      text: "#16a34a",
      darkBg: "rgba(34, 197, 94, 0.15)",
      darkText: "#4ade80"
    },
    beta: {
      bg: "rgba(234, 179, 8, 0.1)",
      text: "#a16207",
      darkBg: "rgba(234, 179, 8, 0.15)",
      darkText: "#facc15"
    },
    alpha: {
      bg: "rgba(239, 68, 68, 0.1)",
      text: "#dc2626",
      darkBg: "rgba(239, 68, 68, 0.15)",
      darkText: "#f87171"
    },
    development: {
      bg: "rgba(249, 115, 22, 0.1)",
      text: "#c2410c",
      darkBg: "rgba(249, 115, 22, 0.15)",
      darkText: "#fb923c"
    },
    deprecated: {
      bg: "rgba(156, 163, 175, 0.1)",
      text: "#6b7280",
      darkBg: "rgba(156, 163, 175, 0.15)",
      darkText: "#9ca3af"
    },
    unknown: {
      bg: "rgba(156, 163, 175, 0.1)",
      text: "#6b7280",
      darkBg: "rgba(156, 163, 175, 0.15)",
      darkText: "#9ca3af"
    }
  };
  const StabilityBadge = ({level}) => {
    const colors = badgeColors[level] || badgeColors.unknown;
    return <span className="stability-badge" data-level={level} style={{
      display: "inline-block",
      padding: "0.125rem 0.5rem",
      borderRadius: "9999px",
      fontSize: "0.75rem",
      fontWeight: 500,
      lineHeight: "1.25rem",
      backgroundColor: colors.bg,
      color: colors.text
    }}>
        {level}
      </span>;
  };
  const stabilityLabel = levels => {
    if (!levels || levels.length === 0) return <span style={{
      color: "#6b7280"
    }}>-</span>;
    return <span style={{
      display: "flex",
      gap: "0.25rem",
      flexWrap: "wrap",
      justifyContent: "center"
    }}>
        {levels.map(level => <StabilityBadge key={level} level={level} />)}
      </span>;
  };
  const hasCol = col => columns.includes(col);
  return <div>
      <style>{`
        .dark .stability-badge[data-level="stable"] { background-color: ${badgeColors.stable.darkBg} !important; color: ${badgeColors.stable.darkText} !important; }
        .dark .stability-badge[data-level="beta"] { background-color: ${badgeColors.beta.darkBg} !important; color: ${badgeColors.beta.darkText} !important; }
        .dark .stability-badge[data-level="alpha"] { background-color: ${badgeColors.alpha.darkBg} !important; color: ${badgeColors.alpha.darkText} !important; }
        .dark .stability-badge[data-level="development"] { background-color: ${badgeColors.development.darkBg} !important; color: ${badgeColors.development.darkText} !important; }
        .dark .stability-badge[data-level="deprecated"] { background-color: ${badgeColors.deprecated.darkBg} !important; color: ${badgeColors.deprecated.darkText} !important; }
        .dark .stability-badge[data-level="unknown"] { background-color: ${badgeColors.unknown.darkBg} !important; color: ${badgeColors.unknown.darkText} !important; }
      `}</style>
      <div className="group/search" style={{
    position: "relative",
    marginBottom: "1.5rem"
  }}>
        <svg style={{
    position: "absolute",
    left: "0.75rem",
    top: "50%",
    transform: "translateY(-50%)",
    width: "1rem",
    height: "1rem",
    color: "#9ca3af",
    pointerEvents: "none"
  }} fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
        </svg>
        <input type="text" placeholder={`Search ${items.length} ${type.toLowerCase()}...`} value={search} onChange={e => setSearch(e.target.value)} style={{
    width: "100%",
    padding: "0.5rem 0.75rem 0.5rem 2.25rem",
    borderRadius: "4px",
    border: "1px solid var(--border-color, #e5e7eb)",
    backgroundColor: "transparent",
    color: "inherit",
    fontSize: "0.875rem",
    outline: "none"
  }} />
      </div>
      <div style={{
    overflowX: "auto"
  }}>
        <table style={{
    width: "100%",
    borderCollapse: "collapse",
    fontSize: "0.875rem"
  }}>
          <thead>
            <tr>
              <th style={{
    textAlign: "left",
    padding: "0.5rem 0.75rem",
    fontWeight: 600,
    whiteSpace: "nowrap"
  }}>Name</th>
              {hasCol("distributions") && <th style={{
    textAlign: "left",
    padding: "0.5rem 0.75rem",
    fontWeight: 600
  }}>Distributions</th>}
              {hasCol("stability") && <th style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem",
    fontWeight: 600
  }}>Stability</th>}
              {hasCol("traces") && <th style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem",
    fontWeight: 600
  }}>Traces</th>}
              {hasCol("metrics") && <th style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem",
    fontWeight: 600
  }}>Metrics</th>}
              {hasCol("logs") && <th style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem",
    fontWeight: 600
  }}>Logs</th>}
            </tr>
          </thead>
          <tbody>
            {filtered.map(item => <tr key={item.slug}>
                <td style={{
    padding: "0.5rem 0.75rem",
    whiteSpace: "nowrap"
  }}>
                  <a href={item.slug} style={{
    textDecoration: "none",
    color: "inherit",
    fontWeight: 500
  }}>
                    {item.name}
                  </a>
                </td>
                {hasCol("distributions") && <td style={{
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem"
  }}>
                    {item.distributions && item.distributions.length > 0 ? <span style={{
    display: "flex",
    gap: "0.25rem",
    flexWrap: "wrap"
  }}>
                          {item.distributions.map(d => <span key={d} style={{
    display: "inline-block",
    padding: "0.125rem 0.5rem",
    borderRadius: "9999px",
    fontSize: "0.75rem",
    fontWeight: 500,
    backgroundColor: "rgba(156, 163, 175, 0.1)",
    color: "#6b7280"
  }}>
                              {d}
                            </span>)}
                        </span> : <span style={{
    color: "#6b7280"
  }}>-</span>}
                  </td>}
                {hasCol("stability") && <td style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem"
  }}>
                    {stabilityLabel(item.stability ? [item.stability] : [])}
                  </td>}
                {hasCol("traces") && <td style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem"
  }}>
                    {stabilityLabel(item.traces)}
                  </td>}
                {hasCol("metrics") && <td style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem"
  }}>
                    {stabilityLabel(item.metrics)}
                  </td>}
                {hasCol("logs") && <td style={{
    textAlign: "center",
    padding: "0.5rem 0.75rem"
  }}>
                    {stabilityLabel(item.logs)}
                  </td>}
              </tr>)}
          </tbody>
        </table>
      </div>
      {filtered.length === 0 && <p style={{
    color: "#9ca3af",
    textAlign: "center",
    marginTop: "2rem"
  }}>
          No {type.toLowerCase()} found matching "{search}"
        </p>}
    </div>;
};

<ComponentList items={[{"name":"Attributes","slug":"/components/processor/attributesprocessor","status":"beta","distributions":["core","contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Awsecsattributes","slug":"/components/processor/awsecsattributesprocessor","status":"development","distributions":[],"stability":"development","traces":["development"],"metrics":["development"],"logs":["development"]},{"name":"Cardinalityguardian","slug":"/components/processor/cardinalityguardianprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":[],"metrics":["alpha"],"logs":[]},{"name":"Coralogix","slug":"/components/processor/coralogixprocessor","status":"alpha","distributions":[],"stability":"alpha","traces":["alpha"],"metrics":[],"logs":[]},{"name":"Cumulativetodelta","slug":"/components/processor/cumulativetodeltaprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":[],"metrics":["beta"],"logs":[]},{"name":"Deltatocumulative","slug":"/components/processor/deltatocumulativeprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":[],"metrics":["alpha"],"logs":[]},{"name":"Deltatorate","slug":"/components/processor/deltatorateprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":[],"metrics":["alpha"],"logs":[]},{"name":"Drain","slug":"/components/processor/drainprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":[],"metrics":[],"logs":["alpha"]},{"name":"Dynamicsampling","slug":"/components/processor/dynamicsamplingprocessor","status":"development","distributions":[],"stability":"development","traces":["development"],"metrics":[],"logs":[]},{"name":"Filter","slug":"/components/processor/filterprocessor","status":"alpha","distributions":["core","contrib","k8s"],"stability":"alpha","traces":["alpha"],"metrics":["alpha"],"logs":["alpha"]},{"name":"Genainormalizer","slug":"/components/processor/genainormalizerprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":["alpha"],"metrics":[],"logs":[]},{"name":"Geoip","slug":"/components/processor/geoipprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":["alpha"],"metrics":["alpha"],"logs":["alpha"]},{"name":"Groupbyattrs","slug":"/components/processor/groupbyattrsprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Groupbytrace","slug":"/components/processor/groupbytraceprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":[],"logs":[]},{"name":"Interval","slug":"/components/processor/intervalprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":[],"metrics":["alpha"],"logs":[]},{"name":"Isolationforest","slug":"/components/processor/isolationforestprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":["alpha"],"metrics":["alpha"],"logs":["alpha"]},{"name":"K8sattributes","slug":"/components/processor/k8sattributesprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Logdedup","slug":"/components/processor/logdedupprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":[],"metrics":[],"logs":["alpha"]},{"name":"Logstransform","slug":"/components/processor/logstransformprocessor","status":"development","distributions":[],"stability":"development","traces":[],"metrics":[],"logs":["development"]},{"name":"Lookup","slug":"/components/processor/lookupprocessor","status":"development","distributions":[],"stability":"development","traces":["development"],"metrics":["development"],"logs":["development"]},{"name":"Metricsgeneration","slug":"/components/processor/metricsgenerationprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":[],"metrics":["alpha"],"logs":[]},{"name":"Metricstarttime","slug":"/components/processor/metricstarttimeprocessor","status":"beta","distributions":["contrib"],"stability":"beta","traces":[],"metrics":["beta"],"logs":[]},{"name":"Metricstransform","slug":"/components/processor/metricstransformprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":[],"metrics":["beta"],"logs":[]},{"name":"Probabilisticsampler","slug":"/components/processor/probabilisticsamplerprocessor","status":"beta","distributions":["core","contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":[],"logs":["alpha"]},{"name":"Redaction","slug":"/components/processor/redactionprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["alpha"],"logs":["alpha"]},{"name":"Remotetap","slug":"/components/processor/remotetapprocessor","status":"alpha","distributions":["contrib","k8s"],"stability":"alpha","traces":["alpha"],"metrics":["alpha"],"logs":["alpha"]},{"name":"Resourcedetection","slug":"/components/processor/resourcedetectionprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Resource","slug":"/components/processor/resourceprocessor","status":"beta","distributions":["core","contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Schema","slug":"/components/processor/schemaprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":["alpha"],"metrics":["alpha"],"logs":["alpha"]},{"name":"Span","slug":"/components/processor/spanprocessor","status":"alpha","distributions":["core","contrib"],"stability":"alpha","traces":["alpha"],"metrics":[],"logs":[]},{"name":"Spanpruning","slug":"/components/processor/spanpruningprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":["alpha"],"metrics":[],"logs":[]},{"name":"Sumologic","slug":"/components/processor/sumologicprocessor","status":"beta","distributions":["contrib"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Tailsampling","slug":"/components/processor/tailsamplingprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":[],"logs":[]},{"name":"Transform","slug":"/components/processor/transformprocessor","status":"beta","distributions":["contrib","k8s"],"stability":"beta","traces":["beta"],"metrics":["beta"],"logs":["beta"]},{"name":"Unroll","slug":"/components/processor/unrollprocessor","status":"alpha","distributions":["contrib"],"stability":"alpha","traces":[],"metrics":[],"logs":["alpha"]}]} columns={["distributions","traces","metrics","logs"]} type="Processors" />
