Skip to content
isdnetworks
Go back

시험 환경이 살아 있는 동안 확인했다

현장에 넣을 장비를 사무실에 두고 시험하고 있었다. 다음 주에 현장으로 나간다고 했다.

Table of contents

Open Table of contents

나가면 못 하는 것이 있었다

장비가 현장에 들어가면 손대기 어렵고 ssh 로 붙는 것 말고는 방법이 없다.

원격으로 되는 것과 안 되는 것을 나눠 봤다.

원격으로 되는 것
  소프트웨어 갱신
  로그 확인
  설정 변경

원격으로 안 되는 것
  선 연결 확인
  센서 교체
  전원 재투입
  통신 모듈 교체

위쪽은 ssh 로 나간 뒤에도 할 수 있으니 급하지 않은데 아래쪽은 손으로 해야 하는 것들이다.

남은 며칠이 이 장비를 자유롭게 다룰 수 있는 마지막 기간이었다. 그 안에 아래쪽을 다 확인해야 했다.

목록을 만들었다

나가기 전에 볼 것을 적었다.

[ ] 센서 4종 전부 값이 나오는가
[ ] 통신이 끊겼다 붙었을 때 자동으로 재연결되는가
[ ] 전원을 껐다 켜면 자동으로 시작되는가
[ ] 저장 공간이 찼을 때 어떻게 되는가
[ ] 시간이 안 맞을 때 어떻게 되는가
[ ] 원격 접속이 되는가
[ ] 원격으로 갱신이 되는가

일곱 개였고 목록으로 만들지 않으면 급한 것부터 하다가 몇 개를 빠뜨린다.

세 개가 안 됐다

전원을 껐다 켜니 프로그램이 안 떴다.

$ systemctl is-enabled collector
disabled

disabled 였다. 그동안 손으로 띄우고 있었으니 현장에서 정전이 나면 그대로 멈춘다.

$ systemctl enable collector

둘째는 저장 공간이 찼을 때였는데 fprintf 가 실패하면서 프로그램이 죽었다.

if (fprintf(fp, "...") < 0) {
    /* 죽지 않고 넘어간다. 로그를 못 써도 수집은 계속한다 */
    log_dropped++;
}

fprintf 가 음수를 돌려주면 세어 두고 넘어가게 했다. 로그를 못 쓰는 것과 수집을 못 하는 것은 무게가 다르다.

셋째는 NTP 가 안 맞을 때였는데 자료가 미래 시각으로 저장돼서 동기가 될 때까지 저장을 미루게 했다.

검증 — 실제로 그 상황을 만들기

목록에 적고 눈으로 보는 것으로는 이 셋이 안 나왔고 실제로 그 상황을 만들어야 나온다.

전원은 코드를 뽑았고 저장 공간은 dd 로 만든 큰 파일로 채웠다.

$ dd if=/dev/zero of=/data/fill bs=1M count=2000

dd 로 2기가를 채워 df 가 거의 100퍼센트를 가리키게 해 놓고 돌렸다. 통신은 랜선을 뽑았다 꽂았다.

코드를 읽어서는 전원이 언제 끊길지를 정할 수 없다. 만들어 보니 셋이 나왔는데 눈으로만 봤으면 일곱 개가 전부 통과로 보였을 것이다.

원격으로 되는 것도 확인했다

나간 뒤에 쓸 것이니 그것도 지금 봐야 했다.

$ ssh -p 22 root@<장비주> 'uptime'

사무실 망에서는 uptime 이 잘 돌아왔는데 현장 망에서도 되는지는 다른 문제였다.

현장 담당자에게 물어보니 밖에서 ssh 로 못 들어온다고 했고 장비가 나가는 방향만 열려 있었다.

/* 장비가 주기적으로 서버에 붙어 명령을 받아 가게 바꿨다 */

그래서 장비가 주기적으로 서버에 붙어 명령을 받아 가는 구조로 바꿨다. 나가기 전에 알아서 다행이었고 나간 뒤에 알았으면 손댈 방법이 없었다.

결과 — 넘긴 미확인 목록

기간이 부족해서 못 한 것도 있었다.

확인 못 한 것
  - 영하 환경에서의 동작 (사무실에서 못 만든다)
  - 3개월 이상 연속 가동 (기간이 부족하다)
  - 센서 4종을 동시에 붙였을 때 (센서가 2개뿐이다)

셋을 적어서 넘겼는데 조건을 만들 수 없거나 시간이 모자란 것들이었다.

못 한 것을 안 적으면 목록에 있는 것이 전부 확인된 것으로 여겨진다. 그러면 나중에 그쪽에서 문제가 났을 때 왜 안 잡혔는지부터 따지게 된다.

나간 뒤에 실제로 나온 것

두 달 뒤에 문제가 하나 났는데 센서 4종을 동시에 붙였더니 하나가 값을 안 줬다.

적어 둔 셋 중 하나여서 예상하고 있던 자리라 원인을 빨리 찾았다.

I2C 주소가 겹치는 센서가 있었는데 사무실에서는 두 개만 붙여 안 겹쳤다. 적어 두지 않았으면 같은 결론에 닿는 데 훨씬 오래 걸렸을 것이다.

정리


Share this post on:

Previous Post
다 끝났다는 신호가 먼저 왔다
Next Post
디스크에 안 쓰고 성공을 돌려준다