Zabbix: LLD monitoring of disks without UserParameter and agent scripts
The idea is simple: the Zabbix server will receive everything from smartmontools through external processing and zabbix_get, parse it and pass it on to dependent elements (appeared in Zabbix 3.4). Thus, not only the number of accesses to the monitored server is reduced, but its resources are not spent, since parsing occurs on the side of the Zabbix server.
One limitation at the moment: only monitoring drives in / dev / sd * format. The format / dev / csmi *, * (Intel Matrix RAID) is not supported due to the fact that zabbix_get considers the comma as the second argument. Correct me if I am wrong.
What will be needed for implementation:
- Template
- Script
- zabbix_get on the server
- smartmontools on agents
Agent setup
The only thing that deserves attention here is the need to uncomment the EnableRemoteCommands = 1 line , otherwise the agent will not be able to accept commands.
Smartmontools
The installation is trivial and will not be considered, however, for Linux there is one need: in order to start without sudo , you need to set the SUID bit to the smartctl file. For Ubuntu, this is sudo chmod u + s / usr / sbin / smartctl .
Script
Depending on your zabbix_server.conf configuration file, you need to put this script in the appropriate directory on the Zabbix server. The default for Ubuntu is / usr / lib / zabbix / externalscripts . Do not forget to give the file permission to execute - sudo chmod 775 /usr/lib/zabbix/externalscripts/smartctl.sh .
| #! / bin / bash | |
| # 2017/12/07 AcidVenom v1.0 | |
| # Скрипт мониторинга HDD с LLD для Zabbix (серверный вариант) | |
| # Автообнаружение дисков | |
| # Ключ: discovery | |
| IFS=$'\n' | |
| JSON="{\"data\":[" | |
| SEP="" | |
| if [[ $2="discovery" ]] | |
| then | |
| get=`zabbix_get -s $1 -k system.run["smartctl --scan-open"] | grep "/dev/sd"` | |
| forhddin$get | |
| do | |
| DISKID=`echo $hdd| grep "/dev/sd"| sed "s/\/dev\///"| cut -c 1-3` | |
| if [[ `zabbix_get -s $1 -k system.run["smartctl -i /dev/$DISKID"] | grep "SMART support is: Enabled"`!="" ]] | |
| then | |
| JSON=$JSON"$SEP{\"{#DISKID}\":\"$DISKID\"}" | |
| SEP=", " | |
| fi | |
| done | |
| JSON=$JSON"]}" | |
| echo$JSON | |
| # Получение информации о дисках | |
| # Ключи: info и attr | |
| else | |
| if [[ $3="info" ]] | |
| then | |
| get=`zabbix_get -s $1 -k system.run["smartctl -x /dev/$2"]` | |
| foroutin$get | |
| do | |
| echo$out | |
| done | |
| elif [[ $3="attr" ]] | |
| then | |
| get=`zabbix_get -s $1 -k system.run["smartctl -A /dev/$2"]` | |
| foroutin$get | |
| do | |
| echo$out | |
| done | |
| fi | |
| fi |
Template
Template exported from version 3.4.4.
The following elements are already present in the template: model, family, serial number, disk size, SMART status; as well as SMART values 3, 5, 7, 9, 10, 190 (194), 196, 197, 198, 199. There are 3 triggers: two indicate high temperatures and one more about bad SMART.
| <?xml version="1.0" encoding="UTF-8"?> | |
| <zabbix_export> | |
| <version>3.4</version> | |
| <date>2017-12-27T05:26:57Z</date> | |
| <groups> | |
| <group> | |
| <name>Templates</name> | |
| </group> | |
| </groups> | |
| <templates> | |
| <template> | |
| <template>Hardware - HDD</template> | |
| <name>Hardware - HDD</name> | |
| <description>Шаблон мониторинга HDD c LLD. | |
| Серверный вариант | |
| | |
| Необходимые компоненты: | |
| smartctl.sh -> /usr/lib/zabbix/externalscripts/ | |
| smartmontools</description> | |
| <groups> | |
| <group> | |
| <name>Templates</name> | |
| </group> | |
| </groups> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <items/> | |
| <discovery_rules> | |
| <discovery_rule> | |
| <name>Обнаружение дисков</name> | |
| <type>10</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.sh[{HOST.CONN},discovery]</key> | |
| <delay>1h</delay> | |
| <status>0</status> | |
| <allowed_hosts/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <filter> | |
| <evaltype>0</evaltype> | |
| <formula/> | |
| <conditions/> | |
| </filter> | |
| <lifetime>1d</lifetime> | |
| <description>Обнаружение подключенных дисков.</description> | |
| <item_prototypes> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - Номинальная емкость</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.capacity.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>1</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>User Capacity: .*\[(.*)\] | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - Семейство</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.family.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>1</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>Model Family: (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - Версия FW</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.fw.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>1</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>Firmware Version: (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - Модель</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.model.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>1</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>Device Model: (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - Серийный номер</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.serial.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>1</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>Serial Number: (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMARTCTL Attr</name> | |
| <type>10</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},attr]</key> | |
| <delay>10m</delay> | |
| <history>1h</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>4</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing/> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype/> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMARTCTL Info</name> | |
| <type>10</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},info]</key> | |
| <delay>10m</delay> | |
| <history>1h</history> | |
| <trends>0</trends> | |
| <status>0</status> | |
| <value_type>4</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing/> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype/> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMART - Spin-Up Time [3]</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.smart.3.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>365d</trends> | |
| <status>0</status> | |
| <value_type>3</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>3 Spin_Up_Time.* - (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},attr]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMART - Reallocated Sector Count [5]</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.smart.5.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>365d</trends> | |
| <status>0</status> | |
| <value_type>3</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>5 Reallocated_Sector.* - (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},attr]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMART - Seek Error Rate [7]</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.smart.7.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>365d</trends> | |
| <status>0</status> | |
| <value_type>3</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
| <logtimefmt/> | |
| <preprocessing> | |
| <step> | |
| <type>5</type> | |
| <params>7 Seek_Error_Rate.* - (.*) | |
| \1</params> | |
| </step> | |
| </preprocessing> | |
| <jmx_endpoint/> | |
| <application_prototypes/> | |
| <master_item_prototype> | |
| <key>smartctl.sh[{HOST.CONN},{#DISKID},attr]</key> | |
| </master_item_prototype> | |
| </item_prototype> | |
| <item_prototype> | |
| <name>Диск {#DISKID} - SMART - Power-on Time Count [9]</name> | |
| <type>18</type> | |
| <snmp_community/> | |
| <snmp_oid/> | |
| <key>smartctl.smart.9.[{#DISKID}]</key> | |
| <delay>0</delay> | |
| <history>90d</history> | |
| <trends>365d</trends> | |
| <status>0</status> | |
| <value_type>3</value_type> | |
| <allowed_hosts/> | |
| <units/> | |
| <snmpv3_contextname/> | |
| <snmpv3_securityname/> | |
| <snmpv3_securitylevel>0</snmpv3_securitylevel> | |
| <snmpv3_authprotocol>0</snmpv3_authprotocol> | |
| <snmpv3_authpassphrase/> | |
| <snmpv3_privprotocol>0</snmpv3_privprotocol> | |
| <snmpv3_privpassphrase/> | |
| <params/> | |
| <ipmi_sensor/> | |
| <authtype>0</authtype> | |
| <username/> | |
| <password/> | |
| <publickey/> | |
| <privatekey/> | |
| <port/> | |
| <description/> | |
| <inventory_link>0</inventory_link> | |
| <applications> | |
| <application> | |
| <name>Жесткие диски</name> | |
| </application> | |
| </applications> | |
| <valuemap/> | |
Read Next Digital Currency Law in Russia: Key Changes for IT SpecialistsAnalysis of the New 'On Digital Currency' Law: How Market Isolation, Custodial Wallets, and Tax Rules Will Affect Developers. Detailed Breakdown of Technical Requirements. Opcodes PHP: if vs switch vs match — comparisonAnalysis of opcodes for if/else, switch and match in PHP. How the compiler generates instructions and when switch is really faster. For middle/senior developers. AI agents in NBIM: fund transformationLearn how NBIM implemented multi-agent AI systems in investments, PR, security and compliance. Time savings, outperformance. Cases and architectures for developers. RAG optimization for legal tasksLearn how hybrid RAG with semantic chunking and grounding improved metrics by 2x in Agentic RAG Legal Challenge. Benchmarks, pipelines and lessons for developers. Launchpool PoolX Bitget 98 Pools Profitability AnalysisBreakdown of 98 Bitget Pools: Income from 200 to 1830$ on 1000$ Investments. Comparison of Selling, Holding, and Borrowed Funds Scenarios. Stable Strategy without Delisting Risks. Learn Metrics for Traders. PaintFE on Rust: portable image editorExplore PaintFE — an open image editor on Rust for Windows/macOS. Layers, GPU filters, Rhai scripts in a portable file. Download and test for development. Macros @Generable @Guide FoundationModels SwiftExplore macros @Generable and @Guide for generating Swift models from LLM. Code examples, integration with LanguageModelSession and SwiftUI. Automate data without boilerplate. MediaTek's Transition to Intel EMIB-T Packaging: Reasons and BenefitsMediaTek exclusively uses Intel EMIB-T instead of TSMC CoWoS for AI chips from 2027. We analyze the reasons, benefits, and market implications. Read details. Conference room on a shoestring: screen calculation and cablesSet up a budget conference room for 30 people: InfoComm standards, commercial TVs, Jabra speakerphones, USB extenders. Practical tips for sysadmins — read and implement. Claude outperforms GPT-5.4 in corporate spendingRamp AI Index Analysis: 73% of new spending on Claude. Benchmarks, API prices, OpenAI subagents. Why business is migrating and what awaits developers. Recently ViewedShare this article |