拡張パイプラインチェーン処理(...Asterisk -> grep -> ping)

拡張パイプラインチェーン処理(...Asterisk -> grep -> ping)

コマンドから値を取得し、他のコマンドに使用したいと思います。コマンド例は次のとおりです。

 cat /var/log/asterisk/full |
   grep "UNREACHABLE" |
   awk '{print $7;}'|
   sort | uniq |
   xargs -I % asterisk -rx 'sip show peer %'|
   grep "Callerid\|Useragent\|Name\|Addr->IP"

UNREACHABLEを通過する行は次のとおりです。

[10月8日04:10:55] 注意 [29814] chan_sip.c: これでピア「sip-437-id」に接続できません!最後のプロモーション:26

awk '{print $7;}'

「sip-437-id」こんなメッセージが来ました。

sort | uniq 

デバイスのみの並べ替えと一意性

 xargs -I % asterisk -rx 'sip show peer %'

ユーザー拡張 xargs wt に属する追加情報を取得しました。

* Name       : sip-437-id
Secret       : <Set>
MD5Secret    : <Not set>   
Remote Secret: <Not set>   
Context      :default   
Subscr.Cont. : default   
Language     :   
AMA flags    :Unknown   
Transfer mode: open   
CallingPres  : 
Presentation Allowed,Not Screened   
Callgroup    :   
Pickupgroup  :   
MOH Suggest  :  
Mailbox      : 492@default   
VM Extension : asterisk   
LastMsgsSent : 0/0   
Call limit   : 2   
Max forwards : 0   
Dynamic      : Yes  
Callerid     : "TELEPHONE" <492>   
MaxCallBR    : 384 kbps   
Expire   : 1671   
Insecure     : no   
Force rport  : No   
ACL          : Yes  
DirectMedACL : No   
T.38 support : No   
T.38 EC mode : Unknown T.38
> MaxDtgrm: 4294967295   
DirectMedia  : No   
PromiscRedir : No  
> User=Phone   : No   
Video Support: No   
Text Support : No   
Ign SDPver  : No   
Trust RPID   : Yes   
Send RPID    : Yes   
TrustIDOutbnd:Legacy   
Subscriptions: Yes   
Overlap dial : Yes   
DTMFmode     :rfc2833   
Timer T1 : 500   
Timer B      : 32000   
ToHost       :  
Addr->IP     : 10.34.34.45:5063   
Defaddr->IP  : (null)   
Prim.Transp. : UDP   
Allowed.Trsp : UDP   Def. U
sername: sip-492-id   
SIP Options : (none)   
Codecs       : 0x10c (ulaw|alaw|g729)   
Codec Order  : (g729:20,ulaw:20,alaw:20)   
Auto-Framing : No   
Status       : OK (26 ms)   
Useragent    : Yealink SIP-T20P 9.61.0.85   
Reg. Contact : sip:sip-437-id @10.34.34.45:5063   
Qualify Freq : 60000 ms   
Sess-Timers : Accept   
Sess-Refresh : uas   
Sess-Expires : 1800 secs   
Min-Sess   : 90 secs   
RTP Engine   : asterisk   
Parkinglot   :   
Use Reason   : No   
Encryption   : No
grep "Callerid\|Useragent\|Name\|Addr->IP"

私はこの情報から私に必要な情報を得る。

> * Name       : sip-437-id
> Callerid     : "TELEPHONE" <492>
> Addr->IP     : 10.34.34.45:5063
> Useragent    : Yealink SIP-T20P 9.61.0.85
> Addr->IP     : 10.34.34.45:5063

この情報は画面 Addr->IP : 10.34.34.45:5063 に記録されます。

IPアドレスをpingして情報の下に印刷したいです。

たとえば、

>   * Name       : sip-437-id   
> Callerid     : "TELEPHONE" <492>
> Addr->IP     : 10.34.34.45:5063   
> Useragent    : Yealink SIP-T20P 9.61.0.85 
> PING 10.34.34.45 (10.34.34.45) 56(84) bytes of data. 64 bytes from
> 10.34.34.45: icmp_req=1 ttl=62 time=6.22 ms 64 bytes from
> 10.34.34.45: icmp_req=2 ttl=62 time=6.25 ms

結果を表示して処理を続ける必要があります。

答え1

最適化:

awk '/UNREACHABLE/{ print $7 }' /var/log/asterisk/full | sort -u \
    | xargs -I % asterisk -rx 'sip show peer %' \
    | grep "Callerid\|Useragent\|Name\|Addr->IP" \
    | awk -F':' '1;/Addr->IP/{ system("ping -c4 "$2)}'

関連情報