{
    "componentChunkName": "component---src-templates-blog-post-tsx",
    "path": "/pfsense-telegraf-error/",
    "result": {"data":{"site":{"siteMetadata":{"title":"vulcan Blog"}},"markdownRemark":{"id":"fa928455-052a-59f4-94ec-d4287b49ce84","tableOfContents":"<ul>\n<li>\n<p><a href=\"#1-%EC%98%A4%EB%A5%98\">1 오류</a></p>\n</li>\n<li>\n<p><a href=\"#2-%EC%99%9C-%EC%9D%B4%EB%9F%B0-%EC%98%A4%EB%A5%98%EA%B0%80-%EC%83%9D%EA%B2%BC%EC%9D%84%EA%B9%8C\">2 왜 이런 오류가 생겼을까?</a></p>\n<ul>\n<li><a href=\"#21-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%9C-%EC%BD%94%EB%93%9C\">2.1 오류가 발생한 코드</a></li>\n<li><a href=\"#22-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%9C-%EA%B3%B3\">2.2 오류가 발생한 곳</a></li>\n<li><a href=\"#23-%EC%99%9C-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%EC%9D%B4%ED%9B%84%EC%97%90-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%96%88%EC%9D%84%EA%B9%8C\">2.3 왜 업그레이드 이후에 에러가 발생했을까?</a></li>\n<li><a href=\"#24-%EC%9D%B4%EA%B2%83%EC%9D%80-%EC%99%9C-%EB%B0%A9%EC%A7%80%EB%90%98%EC%A7%80-%EC%95%8A%EC%95%98%EC%9D%84%EA%B9%8C\">2.4 이것은 왜 방지되지 않았을까?</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#3-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EA%B2%B0%ED%95%A0%EA%B9%8C\">3 어떻게 해결할까?</a></p>\n<ul>\n<li><a href=\"#31-ping-host%EC%97%90-ip-%EC%B6%94%EA%B0%80\">3.1 Ping Host에 IP 추가</a></li>\n<li><a href=\"#32-ping-monitor-%EC%98%B5%EC%85%98-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94\">3.2 Ping Monitor 옵션 비활성화</a></li>\n<li><a href=\"#33-telegrafinc-%EB%B3%80%EA%B2%BD\">3.3 telegraf.inc 변경</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#%ED%9B%84%EA%B8%B0\">후기</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%B0%B8%EA%B3%A0\">참고</a></p>\n</li>\n</ul>","excerpt":"1 오류 pfSense CE 2.6 버전에서 2.7버전으로 업그레이드 한 이후로 위와 같은 에러가 지속적으로 발생하는 것을 발견했다. 그리고 원래 상단바 Service -> Telegraf를 선택해서 telegraf 설정을 GUI로 관리할 수 있었는데, 이 Telegraf…","html":"<h1 id=\"1-오류\" style=\"position:relative;\">1 오류<a href=\"#1-%EC%98%A4%EB%A5%98\" aria-label=\"1 오류 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>pfSense CE 2.6 버전에서 2.7버전으로 업그레이드 한 이후로</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">PHP Fatal error: Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given in /usr/local/pkg/telegraf.inc:132\nStack trace:\n#0 /usr/local/pkg/telegraf.inc(132): implode(',', NULL)\n#1 /etc/inc/pkg-utils.inc(709) : eval()'d code(1): telegraf_resync_config()\n#2 /etc/inc/pkg-utils.inc(709): eval()\n#3 /etc/rc.start_packages(66): sync_package('Telegraf')\n#4 {main}\nthrown in /usr/local/pkg/telegraf.inc on line 132</code></pre></div>\n<p>위와 같은 에러가 지속적으로 발생하는 것을 발견했다. 그리고 원래 상단바 Service -> Telegraf를 선택해서 telegraf 설정을 GUI로 관리할 수 있었는데, 이 Telegraf 선택지가 사라졌다. Telegraf는 pfSense에서 수집 정보들을 DB로 전송해 주는 역할을 한다. 하지만 이 오류가 발생하면 더 이상 telegraf가 작동하지 않는다. 하지만 telegraf를 한번 삭제한 이후에 pfSense를 재시작하고 재시작 직후 teletraf는설치하면 이전 설정대로 telegraf가 작동한다. 하지만 오류는 여전하고 GUI에의 접근 또한 불가능하다.</p>\n<h1 id=\"2-왜-이런-오류가-생겼을까\" style=\"position:relative;\">2 왜 이런 오류가 생겼을까?<a href=\"#2-%EC%99%9C-%EC%9D%B4%EB%9F%B0-%EC%98%A4%EB%A5%98%EA%B0%80-%EC%83%9D%EA%B2%BC%EC%9D%84%EA%B9%8C\" aria-label=\"2 왜 이런 오류가 생겼을까 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<h2 id=\"21-오류가-발생한-코드\" style=\"position:relative;\">2.1 오류가 발생한 코드<a href=\"#21-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%9C-%EC%BD%94%EB%93%9C\" aria-label=\"21 오류가 발생한 코드 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p><code class=\"language-text\">telegraf.inc</code>파일에서 발생했다. 이 파일을 살펴보면 <code class=\"language-text\">telegraf_resync_config</code>작업을 수행하는데, 이는 설정값대로 <code class=\"language-text\">/usr/local/etc/telegraf.conf</code> 파일을 다시 동기화 해주는 코드가 작성돼 있다. 이 작업은 GUI에서 telegraf 설정값을 바꿨을 때, telegraf를 재설치 했을 때 동작한다. (추가로 다른 조건이 있을 수 있지만 이 두 조건은 확실하다.)</p>\n<p>먼저 error가 발생한 코드를 살펴보도록 하자. pfSense의 Edit File을 통해 살펴볼 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\"><span class=\"token comment\">//      /usr/local/pkg/telegraf.inc</span>\n        <span class=\"token comment\">/* Ping Monitor Configuration */</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_enable\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_1'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_1\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_2'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_2\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_3'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_3\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_4'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_4\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n\n                <span class=\"token variable\">$monitor_hosts</span> <span class=\"token operator\">=</span> <span class=\"token function\">implode</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\",\"</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>      <span class=\"token comment\">// line 132</span>\n\n                <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\n[[inputs.ping]]\\n\"</span><span class=\"token punctuation\">;</span>\n                <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\turls = [\"</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$monitor_hosts</span> <span class=\"token operator\">.</span> <span class=\"token string double-quoted-string\">\"]\"</span><span class=\"token punctuation\">;</span>\n                <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\n\\tdeadline = 0\\n\\n\"</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">/* deadline (-w) function not supported in BSD ping */</span>\n        <span class=\"token punctuation\">}</span></code></pre></div>\n<p>오류가 발생한 라인의 코드를 살펴보면 <code class=\"language-text\">$telegraf_conf</code>에서 <code class=\"language-text\">ping_host_*</code>의 값들을 가져와서 아래와 같은 형태로 만들어준다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">[[inputs.ping]]\n\turls = [\"host.1.ip.addr\",\"host.2.ip.addr\",\"host.3.ip.addr\",\"host.4.ip.addr\"]\n\tdeadline = 0</code></pre></div>\n<p>이 부분은 telegraf가 ping메세지를 지정된 IP로 보내고 결과를 받아 목표로하는 서버가 살아있는지 확인할 수 있게 해준다. 필수적인 사항은 아니고, pfSense의 telegraf 설정에서 비활성화할 수 있다.</p>\n<h2 id=\"22-오류가-발생한-곳\" style=\"position:relative;\">2.2 오류가 발생한 곳<a href=\"#22-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%9C-%EA%B3%B3\" aria-label=\"22 오류가 발생한 곳 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>error 메시지에서는 <code class=\"language-text\">telegraf.inc</code>의 line 132에서 <code class=\"language-text\">implode(',', NULL)</code>때문에 error가 발생했음을 알 수 있다. <code class=\"language-text\">telegraf.inc</code>파일의 line 132를 보면 <code class=\"language-text\">$monitor_hosts = implode(\",\", $monitor_hosts);</code>라는 코드가 있는데, 여기서 <code class=\"language-text\">$monitor_hosts</code>가 <code class=\"language-text\">NULL</code>이라는 것이다. 왜 그럴까? 먼저 line 132 이전에 if 문에서 <code class=\"language-text\">ping_host_*</code>값들을 <code class=\"language-text\">$monitor_hosts</code> array에 추가해 주는 것을 알 수 있다. 그런데 만약 <code class=\"language-text\">telegraf_conf</code>에 <code class=\"language-text\">ping_host_*</code>값이 없다면? <code class=\"language-text\">$monitor_hosts</code>에는 아무것도 들어가지 않을 것이다. PHP에서는 변수가 명시적으로 초기화되지 않아도 사용될 때 자동으로 생성된다. 그러나 변수가 명시적으로 초기화되지 않은 경우 해당 변수는 <code class=\"language-text\">NULL</code> 값을 가질 수 있다. 때문에 if문을 지나면서 한 번도 조건을 만족하지 못했다면 <code class=\"language-text\">$monitor_hosts</code>는 <code class=\"language-text\">NULL</code>이 될 수 있다.</p>\n<p>pfSense CE 2.7은 PHP 8버전을 사용한다. PHP 8버전에서는 <code class=\"language-text\">implode</code>를 <code class=\"language-text\">NULL</code> 값과 함께 호출하는 것이 허용되지 않는다. 때문에 <code class=\"language-text\">implode(',', NULL)</code>과 같은 형식은 error를 발생시킨다.</p>\n<h2 id=\"23-왜-업그레이드-이후에-에러가-발생했을까\" style=\"position:relative;\">2.3 왜 업그레이드 이후에 에러가 발생했을까?<a href=\"#23-%EC%99%9C-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%EC%9D%B4%ED%9B%84%EC%97%90-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%96%88%EC%9D%84%EA%B9%8C\" aria-label=\"23 왜 업그레이드 이후에 에러가 발생했을까 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>pfSense CE 2.7 업그레이드 노트를 살펴보면 PHP 버전이 7.4.X 버전에서 8.2.6 버전으로 업그레이드된 것을 알 수 있다. PHP 7버전에서는 <code class=\"language-text\">implode</code>를 <code class=\"language-text\">NULL</code> 값과 함께 호출하는 것이 허용됐다. 구현에 따라 <code class=\"language-text\">implode</code>의 반환 값이 <code class=\"language-text\">NULL</code> 또는 빈 문자열이 된다. 때문에 <code class=\"language-text\">$monitor_hosts</code>에 아무것도 들어가지 않았다고 하더라도 error가 발생하지 않는다.</p>\n<p>하지만 위에서 설명한 것과 같이 PHP 8버전에서는 더 엄격한 type검사를 시행하고, 때문에 <code class=\"language-text\">implode</code>를 <code class=\"language-text\">NULL</code> 값과 함께 호출하면 error가 발생한다. 그 때문에 pfSense 2.6에서 2.7버전으로 업그레이드를 하면서, PHP 버전이 8버전으로 업그레이드됐고, 이것이 문제를 일으킨 것이다.</p>\n<h2 id=\"24-이것은-왜-방지되지-않았을까\" style=\"position:relative;\">2.4 이것은 왜 방지되지 않았을까?<a href=\"#24-%EC%9D%B4%EA%B2%83%EC%9D%80-%EC%99%9C-%EB%B0%A9%EC%A7%80%EB%90%98%EC%A7%80-%EC%95%8A%EC%95%98%EC%9D%84%EA%B9%8C\" aria-label=\"24 이것은 왜 방지되지 않았을까 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>우선 telegraf는 urls가 비어있다고 하더라도 아무런 문제 없이 동작한다. <code class=\"language-text\">telegraf/plugins/inputs/ping/ping.go</code>을 보자.</p>\n<div class=\"gatsby-highlight\" data-language=\"go\"><pre class=\"language-go\"><code class=\"language-go\"><span class=\"token keyword\">func</span> <span class=\"token punctuation\">(</span>p <span class=\"token operator\">*</span>Ping<span class=\"token punctuation\">)</span> <span class=\"token function\">Gather</span><span class=\"token punctuation\">(</span>acc telegraf<span class=\"token punctuation\">.</span>Accumulator<span class=\"token punctuation\">)</span> <span class=\"token builtin\">error</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">for</span> <span class=\"token boolean\">_</span><span class=\"token punctuation\">,</span> host <span class=\"token operator\">:=</span> <span class=\"token keyword\">range</span> p<span class=\"token punctuation\">.</span>Urls <span class=\"token punctuation\">{</span>\n\t\tp<span class=\"token punctuation\">.</span>wg<span class=\"token punctuation\">.</span><span class=\"token function\">Add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token keyword\">go</span> <span class=\"token keyword\">func</span><span class=\"token punctuation\">(</span>host <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">defer</span> p<span class=\"token punctuation\">.</span>wg<span class=\"token punctuation\">.</span><span class=\"token function\">Done</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n\t\t\t<span class=\"token keyword\">switch</span> p<span class=\"token punctuation\">.</span>Method <span class=\"token punctuation\">{</span>\n\t\t\t<span class=\"token keyword\">case</span> <span class=\"token string\">\"native\"</span><span class=\"token punctuation\">:</span>\n\t\t\t\tp<span class=\"token punctuation\">.</span><span class=\"token function\">pingToURLNative</span><span class=\"token punctuation\">(</span>host<span class=\"token punctuation\">,</span> acc<span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token keyword\">default</span><span class=\"token punctuation\">:</span>\n\t\t\t\tp<span class=\"token punctuation\">.</span><span class=\"token function\">pingToURL</span><span class=\"token punctuation\">(</span>host<span class=\"token punctuation\">,</span> acc<span class=\"token punctuation\">)</span>\n\t\t\t<span class=\"token punctuation\">}</span>\n\t\t<span class=\"token punctuation\">}</span><span class=\"token punctuation\">(</span>host<span class=\"token punctuation\">)</span>\n\t<span class=\"token punctuation\">}</span>\n\n\tp<span class=\"token punctuation\">.</span>wg<span class=\"token punctuation\">.</span><span class=\"token function\">Wait</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n\t<span class=\"token keyword\">return</span> <span class=\"token boolean\">nil</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>여기서 ping을 시도한다. 여기서 <code class=\"language-text\">p.Urls</code>가 비어있다고 하더라도, ping작업을 수행하지 않을 뿐 문제는 생기지 않는다. <code class=\"language-text\">p.wg.Add(1)</code>과 <code class=\"language-text\">p.wg.Done()</code>역시 호출되지 않기에 <code class=\"language-text\">p.wg.wait()</code>이 즉시 호출된다. 그 때문에 동기화 문제도 발생하지 않는다.</p>\n<p>지금은 pfSense의 Telegraf 설정에서 <code class=\"language-text\">Enable Ping Monitor</code>옵션을 켜고 <code class=\"language-text\">Ping Host</code>에 아무것도 적지 않고 저장하면 아래와 같은 Crash Report를 내보낸다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">PHP Fatal error:  Uncaught TypeError: implode(): Argument #1 ($array) must be of type array, string given in /usr/local/pkg/telegraf.inc:132\nStack trace:\n#0 /usr/local/pkg/telegraf.inc(132): implode()\n#1 /usr/local/www/pkg_edit.PHP(245) : eval()'d code(1): telegraf_resync_config()\n#2 /usr/local/www/pkg_edit.PHP(245): eval()\n#3 {main}\n  thrown in /usr/local/pkg/telegraf.inc on line 132</code></pre></div>\n<p>하지만 이것은 위에서 서술한 PHP error가 발생해서 나온 Crash Report일 뿐이지, pfSense에서 Telegraf 설정 GUI에서 Save를 눌렀을 때 pfSense가 자체적으로 format을 검증하고 에러를 내는 것이 아니다. 그 때문에 pfSense CE 2.6버전에서는 Crash Report 없이 정상적으로 저장됐을 것이다.</p>\n<p>Ping Host는 입력하는 창은 아래와 같이 돼 있다.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 597px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/afd1b2058875356d65d585ade9002da9/17602/Ping_Host_input.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 36.075949367088604%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABMUlEQVQoz4WRuW7CQBRF/VVIBAVbdrxipHjHxs4XRATsmpY4rAIkKioQDT95opkmqaA4Gs28W5z7Rnnt98lHBVVVkec55bhAMyz6dsTQ9xgMBvi+j+M62LYt767rSoa+j+d5vHS7dDoder0eiqqqWKYlB6NRThSGmJbN51dD09Q0TUNd15LZbCbP/2+CyWQiZ2VZomiahqapvJkmWTYiDAIcx+an/Wa73bJer9lsNg8RmePxyHQ6RdENg/KjIksz0jQlL3JZZ7VacTgc2O/3T9ntdpxOJ2mp6LpOkqaEQUgSxyRpIvfVtq0MCgNh+giR+TPUdeIkIXgPiKKIOI5wHIfFYiGDwlRUesRyuZSmYpeKISpXFVmWURQF43Isf/J8PnO73bher0+5XC7c73fm8zm/OmxGSx2qDhIAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Ping Host Input\"\n        title=\"Ping Host Input\"\n        src=\"/static/afd1b2058875356d65d585ade9002da9/17602/Ping_Host_input.png\"\n        srcset=\"/static/afd1b2058875356d65d585ade9002da9/c26ae/Ping_Host_input.png 158w,\n/static/afd1b2058875356d65d585ade9002da9/6bdcf/Ping_Host_input.png 315w,\n/static/afd1b2058875356d65d585ade9002da9/17602/Ping_Host_input.png 597w\"\n        sizes=\"(max-width: 597px) 100vw, 597px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>여기서 분명 <code class=\"language-text\">Ping Host 1</code>은 <code class=\"language-text\">(optional)</code>표시가 없다. 그런데 비우고 저장해도 pfSense에서는 경고를 보내지 않는다. pfSense 2.7버전 이전에서 <code class=\"language-text\">Enable Ping Monitor</code> 옵션을 켜고 <code class=\"language-text\">Ping Host</code>에 아무것도 적지 않고 저장한 사람들은 모두 같은 오류가 발생했을 것이다. 또한 이 오류에 대해서 여러 버그 리포트를 봤는데, 많은 사람들은 해당 문제를 재현하지 못했다고 말하고 있었다. 이것은 아마도 <code class=\"language-text\">Enable Ping Monitor</code> 옵션이 꺼진 상태에서 pfSense 2.6에서 2.7버전으로 업그레이드했기 때문에 문제가 발생하지 않았을 것으로 생각된다.</p>\n<h1 id=\"3-어떻게-해결할까\" style=\"position:relative;\">3 어떻게 해결할까?<a href=\"#3-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EA%B2%B0%ED%95%A0%EA%B9%8C\" aria-label=\"3 어떻게 해결할까 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<h2 id=\"31-ping-host에-ip-추가\" style=\"position:relative;\">3.1 Ping Host에 IP 추가<a href=\"#31-ping-host%EC%97%90-ip-%EC%B6%94%EA%B0%80\" aria-label=\"31 ping host에 ip 추가 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>위에서 설명했듯이 <code class=\"language-text\">Ping Host</code>에 IP가 하나도 들어있지 않아서 발생하는 문제다. 때문에 <code class=\"language-text\">Ping Host</code>에 한 개 이상 IP를 추가하면 오류를 해결할 수 있다. 그런데 앞서 <a href=\"#1-%EC%98%A4%EB%A5%98\">1 오류</a>에서 “GUI로 관리할 수 있었는데, 이 Telegraf 선택지가 사라졌다.”라고 했다. 그럼 어떻게 설정을 수정할 수 있을까?</p>\n<p>pfSense는 <code class=\"language-text\">/conf/config.xml</code>이 모든 package들의 configuration이 저장된다. 이 파일을 열어보면 <code class=\"language-text\">&lt;telegraf></code>에 <code class=\"language-text\">&lt;ping_host_1>&lt;/ping_host_1></code>항목이 있다. 여기에 아래와 같이 IP를 추가하고 저장해주면 된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ping_host_1</span><span class=\"token punctuation\">></span></span>db.server.ip.addr<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ping_host_1</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"32-ping-monitor-옵션-비활성화\" style=\"position:relative;\">3.2 Ping Monitor 옵션 비활성화<a href=\"#32-ping-monitor-%EC%98%B5%EC%85%98-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94\" aria-label=\"32 ping monitor 옵션 비활성화 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>위에 <a href=\"#21-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%9C-%EC%BD%94%EB%93%9C\">코드</a>를 살펴보면 <code class=\"language-text\">if ($telegraf_conf[\"ping_enable\"]) {</code>여기에 <code class=\"language-text\">ping_enable</code>옵션이 켜져 있는지 확인하는 코드가 있다. 만약 Ping Monitor 옵션이 커져있다면, 문제가 되는 line 132 또한 실행되지 않을 것이다. 이 또한 <code class=\"language-text\">/conf/config.xml</code>에 <code class=\"language-text\">&lt;ping_enable>on&lt;/ping_enable></code>항목이 있다. 여기서 아래와 같이 <code class=\"language-text\">on</code>을 지워주면 Ping Monitor 옵션을 비활성화한 것이다.</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ping_enable</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ping_enable</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>이것으로 오류를 해결할 수 있다.</p>\n<h2 id=\"33-telegrafinc-변경\" style=\"position:relative;\">3.3 telegraf.inc 변경<a href=\"#33-telegrafinc-%EB%B3%80%EA%B2%BD\" aria-label=\"33 telegrafinc 변경 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>처음에는 문제의 근본적인 원인인 <code class=\"language-text\">telegraf.inc</code> 파일을 변경해서 해결할 수 있다고 생각했다. 하지만 <code class=\"language-text\">telegraf.inc</code> 파일은 package를 재설치하거나 pfSense를 재부팅할 때 다시 서버에서 가져온다. 그 때문에 수정은 영구적이지 않다. 또한 <code class=\"language-text\">telegraf.inc</code> 파일을 수정하고 해당 패키지를 재실행할 방법 또한 마땅치 않다. 하지만 근본적으로는 이 부분이 해결돼야 한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">        <span class=\"token comment\">/* Ping Monitor Configuration */</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_enable\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                <span class=\"token variable\">$monitor_hosts</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">array</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_1'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_1\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_2'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_2\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_3'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_3\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string single-quoted-string\">'ping_host_4'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string single-quoted-string\">'\"'</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$telegraf_conf</span><span class=\"token punctuation\">[</span><span class=\"token string double-quoted-string\">\"ping_host_4\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">.</span> <span class=\"token string single-quoted-string\">'\"'</span><span class=\"token punctuation\">;</span>\n                <span class=\"token punctuation\">}</span>\n\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token keyword\">empty</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token variable\">$monitor_hosts</span> <span class=\"token operator\">=</span> <span class=\"token function\">implode</span><span class=\"token punctuation\">(</span><span class=\"token string double-quoted-string\">\",\"</span><span class=\"token punctuation\">,</span> <span class=\"token variable\">$monitor_hosts</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>      <span class=\"token comment\">// line 132</span>\n\n                    <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\n[[inputs.ping]]\\n\"</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\turls = [\"</span> <span class=\"token operator\">.</span> <span class=\"token variable\">$monitor_hosts</span> <span class=\"token operator\">.</span> <span class=\"token string double-quoted-string\">\"]\"</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token variable\">$cfg</span> <span class=\"token operator\">.=</span> <span class=\"token string double-quoted-string\">\"\\n\\tdeadline = 0\\n\\n\"</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">/* deadline (-w) function not supported in BSD ping */</span>\n                <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span></code></pre></div>\n<p>위와 같이 <code class=\"language-text\">$monitor_hosts</code>를 <code class=\"language-text\">array()</code>로 초기화하고 빈 배열인지 확인하고 다음 과정을 진행하면 될 것이다.</p>\n<p>이 해결 방법을 떠올리고 해당 패키지에 기여를 하고 싶어서 검색하다 pfSense package 저장소를 발견했는데, 완전히 같은 방법으로 이미 <a href=\"https://github.com/pfsense/FreeBSD-ports/blob/devel/net-mgmt/pfSense-pkg-Telegraf/files/usr/local/pkg/telegraf.inc\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">해결</a>돼 있어서 놀랐다. 조금 더 관심을 두고 빨리 해결하고자 했으면 좋았을 것 같다. 또한 pfSense CE 2.8.0, pfSense Plus 24.08버전에서는 해당 패치가 포함돼 문제가 해결될 것 같다.</p>\n<h1 id=\"후기\" style=\"position:relative;\">후기<a href=\"#%ED%9B%84%EA%B8%B0\" aria-label=\"후기 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>이 문제는 pfSense CE 2.7버전 업데이트 직후 부터 보고됐었다. 하지만 그동안 해결 방법이 알려지지 않았고, 최근에 발견한 이 <a href=\"https://redmine.pfSense.org/issues/14861\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">문서</a> 이외에는 해결 방법을 찾을 수 없었다. 그리고 해당 문서에서 또한 친절한 해결 절차에 대해서는 쓰여있지 않았다. 때문에 이 글을 작성하게 됐다. 같은 오류로 많은 스트레스를 받은 사람들이 이 글로 오류를 해결했기를 바란다.</p>\n<p>이 글에는 표현이 이상하거나 틀린 내용이 있을 수 있습니다. 모든 지적은 환영합니다.</p>\n<h1 id=\"참고\" style=\"position:relative;\">참고<a href=\"#%EC%B0%B8%EA%B3%A0\" aria-label=\"참고 permalink\" class=\"heading-anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<ul>\n<li><a href=\"https://github.com/influxdata/telegraf/tree/master/plugins/inputs/ping\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">telegraf inputs.ping</a></li>\n<li><a href=\"https://www.PHP.net/manual/en/function.implode.PHP\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PHP implode</a></li>\n<li><a href=\"https://www.PHP.net/manual/en/migration80.incompatible.PHP\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PHP manual Backward Incompatible Changes</a></li>\n<li><a href=\"https://docs.netgate.com/pfSense/en/latest/releases/2-7-0.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pfSense CE 2.7 upgrade note</a></li>\n<li><a href=\"https://redmine.pfSense.org/issues/14861\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pfSense issues</a></li>\n<li><a href=\"https://github.com/pfsense/FreeBSD-ports/blob/devel/net-mgmt/pfSense-pkg-Telegraf/files/usr/local/pkg/telegraf.inc\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">issue fixed</a></li>\n</ul>","fields":{"slug":"/pfsense-telegraf-error/"},"frontmatter":{"title":"pfSense 2.7 업그레이드 후 Telegraf 오류 해결 방법","date":"2024-07-28","description":"pfSense Telegraf Error","tags":["server","pfSense","error"]}},"previous":{"fields":{"slug":"/expand-ubuntu-lvm/"},"frontmatter":{"title":"우분투 lvm 확장하기"}},"next":{"fields":{"slug":"/pfsense-telegraf-error/en/"},"frontmatter":{"title":"How to Fix Telegraf Errors After Upgrading to pfSense 2.7"}}},"pageContext":{"id":"fa928455-052a-59f4-94ec-d4287b49ce84","previousPostId":"4b382aad-1a00-57e7-a401-838cda32a087","nextPostId":"929ac6b4-3ff1-5a75-bec5-947c2be3536b"}},
    "staticQueryHashes": ["2260143708","2538111481","658623446","984448874"]}