Nokia 7705에서 LibreNMS discovery가 Column 'channels' cannot be null로 죽고 DOM을 수집하지 못함
LibreNMS에서 Nokia 7705 애그리게이션 라우터 몇 대를 폴링하고 있는데, 늘 그렇듯 구간이 나빠지는 걸 고객이 알아채기 전에 잡으려고 광 DOM을 받고 싶었습니다. 그런데 이 장비들에서는 discovery가 끝까지 안 갑니다.
- TiMOS를 구동하는 Nokia 7705
- LibreNMS 26.3.1
- 포트에는 일반적인 단일 레인 1G SFP, 벤더는 여러 종류에 일부는 오래된 것
- SNMP 자체는 정상: 인터페이스, CPU, 메모리, 트래픽 모두 정상적으로 폴링됨
discovery는 매번 여기서 멈춥니다:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'channels' cannot be null
그 결과 라우터 전체에 트랜시버 항목도 광 센서도 하나도 안 생깁니다 - 포트 하나만 문제고 나머지는 정상인 게 아니라, 장비 전체가 통째로 빈 채로 나옵니다.
시도한 것:
- 해당 장비 하나만 따로 discovery 재실행, 같은 지점에서 같은 에러
- 장비를 삭제하고 다시 추가: 생성은 되는데 discovery가 같은 지점에서 죽음
- 같은 환경의 다른 벤더 장비는 트랜시버와 DOM이 정상적으로 discovery됨, 그러니 제 쪽 데이터베이스가 고장난 것 같지는 않음
이거 TiMOS discovery의 알려진 문제인가요? 이 라우터들의 트랜시버 discovery를 아예 끄는 것 말고 다른 해법이 있을까요?
Comments 3
알려진 문제이고, 데이터베이스 탓이 아닙니다.
TiMOS discovery 코드는 TIMETRA-PORT-MIB::tmnxPortSFPNumLanes에서 레인 수를 가져와서 받은 값을 그대로
channels컬럼에 넣는데, 이 컬럼은 NULL을 받지 않습니다. 오래된 단일 레인 광모듈이 주범인 경우가 많습니다. 에이전트가 그런 모듈에 대해서는 그 객체 값을 아예 채우지 않다 보니, 포트가 insert에 null을 넘기고, insert가 터지면서 장애가 해당 장비의 트랜시버 discovery 전체를 끌고 내려갑니다. 특이 모듈이 꽂힌 포트 하나가 아니라 모든 포트를 잃는 이유가 바로 이겁니다.빠져나갈 방법은 두 가지입니다. 가장 깔끔한 건 LibreNMS를 최신으로 올리는 겁니다 - 업스트림에 반영된 수정이 LibreNMS/OS/Timos.php에서 값을 보호해서, 레인 수가 없거나 비어 있으면 단일 채널로 읽고 그 외의 값은 정수로 강제 변환합니다. 지금 버전에 묶여 있다면 그 파일에 같은 보호 로직을 직접 넣으세요. 몇 줄이면 되지만, 기억해 두지 않으면 다음 업데이트 때 사라집니다.
뭔가 패치하기 전에 라우터에서 TIMETRA-PORT-MIB::tmnxPortSFPNumLanes를 먼저 조회해 보세요. 아무 응답이 없는 포트가 바로 insert를 죽이는 포트이니, 거기 어떤 광모듈이 꽂혀 있는지 확인해 둘 가치가 있습니다.
두 가지 다 확인했습니다, 감사합니다.
그 OID를 조회해 보니, 가장 오래된 1G 광모듈이 꽂힌 포트는 레인 수 자체가 아무것도 안 돌아오고, 더 최신 모듈은 전부 1로 응답합니다. 그러니 null은 말씀하신 그대로 제가 물려받은 모듈들에서 나오는 거였습니다.
그 체크가 들어간 빌드로 올리고 나니, 모든 7705에서 discovery가 끝까지 돌고, 트랜시버가 각각 단일 채널로 나타나고, 광 센서도 그래프에 찍히고 있습니다. 라우터 쪽은 아무것도 안 바꿨고, 제외한 포트도 없습니다.
이제 discovery가 끝까지 도니 예상해 둘 만한 게 두 가지 있습니다.
Nokia 장비에서 DDM은 모듈 EEPROM의 capability 플래그로 게이팅됩니다. 이건 제품군 전체에 걸친 공통 방식이고, 7210 SAS 인터페이스 가이드에 가장 분명하게 적혀 있습니다. 플랫폼은 그 플래그를 전혀 세팅하지 않은 모듈에 대해서도 진단값을 아무렇지 않게 찍어내면서, 같은 문단에서 그 수치를 검증하거나 확인한 적이 없다고 말합니다. 사용 중인 장비와는 다르지만 논리는 같습니다 - 서드파티 광모듈에서 그럴듯한 RX/TX 수치가 나온다고 해서 캘리브레이션이 맞다는 증거는 아닙니다.
나머지 절반은 모듈 자체입니다. GLC-SX-MM에는 A2h 페이지가 없어서 어떤 폴러도 읽을 게 없습니다. GLC-SX-MMD에는 있고, 그 D가 diagnostics를 뜻합니다. 그래프 하나가 계속 평평하게 비어 있다면 폴러를 의심하기 전에 그것부터 확인하세요.